'Nome       : EncDocCer_Pgm.inc
'Tipo       : INC
'Data       : 2016/11/11
'Versao     : 2.1
'Descricao  : Inclusao de funcoes para documentos certificados

'==============================================================================
'#VER - Historia de modificacoes
'==============================================================================
'- Versao : 2.2   2016/11/11 --------------------------------------------------
'Informacao de documentos com erros só se pais for = 1

'- Versao : 2.1   2013/01/09 --------------------------------------------------
'Informacao para empresa de demonstracao
'Informacao para documento com erros
'Descricoes alternativas

'- Versao : 2.0   2012/12/10 --------------------------------------------------
'Novas opcoes para versao 2 (2013)

'- Versao : 1.0f  2012/04/12 --------------------------------------------------
'Opcao para certificacao de facturas CPM (Manuais)

'- Versao : 1.0e  2012/03/27 --------------------------------------------------
'Correccao para permitir usar 'Este documento não serve de factura' nos orçamentos e facturas proforma

'- Versao : 1.0d  2011/01/03 --------------------------------------------------
'Correccao para permitir usar com documentos compostos

'- Versao : 1.0c  2010/12/16 --------------------------------------------------
'Forcar inicializacao da impressora antes de escrever informacao de anulaccao (texto rodado)

'- Versao : 1.0b  2010/11/17 --------------------------------------------------
'Correccao da variavel CerPgmDe1$ para documentos certificados

'- Versao : 1.0a  2010/11/08 --------------------------------------------------
'Funcoes novas:
'  - DocCerLisAnu, listar informacao de anulado (modo grafico)

'- Versao : 1.0   2010/10/31 --------------------------------------------------
'Versao base


'==============================================================================
'INF - Informacoes
'==============================================================================
'Incluir este ficheiro a seguir a zona PGM
'
'Exemplo:
'Funcoes para certificacao         =[SIG_DOC_DIR.ENC],EncDocCer_Pgm.inc
'
'Ver exemplo em StdFac.imp ou StdFac.ipw


'------------------------------------------------------------------------------
'Exemplo de alteracoes a executar para usar dados de certificacao
'------------------------------------------------------------------------------
'Sub DocCab 'cabecalho do documento
'comandos a incluir
'call DocCerVarPrp                                  'preparar variaveis referentes a certificacao
'
'comandos existentes
'...
'
'- listar nome do documento ---------------------------------------------------
'Funcao actual:                                @DocNome                        #
'Substituir por:                               @vCerDocIde                     #
'
'- listar numero do documento -------------------------------------------------
'Funcao actual:                                NUMERO DOCUMENTO  : @DocRcNum   #
'Substituir por:                               NUMERO DOCUMENTO  : @vCerDocNum #
'
'...
'end sub


'Sub DocFim 'total do documento
'...
'
'- listar assinatura do documento ---------------------------------------------
'Substituir:
'?                                          |==================================
'?   ** PROCESSADO POR COMPUTADOR **        | @TotalAbv1     : @DocTot        #
'?                                          |                                 #
'
'Por:
'?                                          |==================================
'? @vCerPgmDe1                              | @TotalAbv1     : @DocTot        #
'? @vCerPgmDe2                              |                                 #
'?=============================================================================
'print CerPgmDes$                          'certificacao do programa
'
'...
'end sub


'==============================================================================
#PGM - Programa/Funcoes
'==============================================================================
'- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
'- (13) --->'Comentario
'- (25) --------------->'Comentario
'- (28) ------------------>'Comentario
'- (40) ------------------------------>'Comentario
'- (43) --------------------------------->'Comentario
'- (46) ------------------------------------>'Comentario
'- (49) --------------------------------------->'Comentario
'- (52) ------------------------------------------>'Comentario
'- (55) --------------------------------------------->'Comentario
'- (58) ------------------------------------------------>'Comentario
'- (61) --------------------------------------------------->'Comentario
'- (64) ------------------------------------------------------>'Comentario
'- (67) --------------------------------------------------------->'Comentario
'- (70) ------------------------------------------------------------>'Comentario


'==============================================================================
'#CER - Certificacao
'==============================================================================
Sub DocCerVarPrp 'preparar variaveis referentes a certificacao
CerDocAnu = 0                                               'assume nao anulado
call DocCerVarPrpNao                                        'preparar valores por defeito

CerPgmNum$ = EncDocCer$("PGM")                              'certificacao do programa (numero)

if CerPgmNum$ <> "" then                                    'programa certificado ?
    call DocCerVarPrpUsa                                    'preparar dados da certificacao
end if
end sub


Sub DocCerLisAnu 'listar informacao de anulado
if CerDocAnu = 1 then                                       'documento anulado ?
   CerDocAnuUsa = CerDocAnuAsp                              'activar aspecto a usar
else
   CerDocAnuUsa = 0                                         'anular aspecto a usar
end if

'call DocCerErrPrp                                           'preparar situacao de erros
'if CerDocErrUsa = 1 then                                    'documento com erros ?
'   CerDocAnuUsa = -1                                        'activar aspecto a usar
'end if

if CerDocAnuUsa = 1 then                                    'aspecto 1 ?
   anuTx$ = "Documento anulado"                             'texto a listar
   anuPx  =  60                                             'posicao X
   anuPy  = 200                                             'posicao Y

   PrWIN AJT_B, 0, 0                                        'activar posicao nase
   PrWIN COR_T, 240, 170, 130                               'cor de texto RGB

   PrWIN FON, 40, 1                                         'activar fonte

   PrWIN TX_N,   -100, -100,"."                             'inicializar impressao
   PrWIN TX_RO, anuPx,anuPy,45,anuTx$                       'registar informacao

   PrWIN COR_T, 0, 0, 0                                     'activar cor de texto RGB
end if


if CerDocAnuUsa = 2 then                                    'aspecto 2 ?
   anuTx$ = "Documento anulado"                             'texto a listar
   anuPx  =  20                                             'posicao X
   anuPy  = 240                                             'posicao Y

   PrWIN AJT_B, 0, 0                                        'activar posicao nase
   PrWIN COR_T, 240, 170, 130                               'cor de texto RGB

   PrWIN FON, 75, 1                                         'activar fonte

   PrWIN TX_RO, anuPx,anuPy,45,anuTx$                       'registar informacao

   PrWIN COR_T, 0, 0, 0                                     'activar cor de texto RGB
end if


'casos especiais
if Enc_Mst_Pais > 1 then                                    'pais estrangeiro ?
   CerDocAnuUsa = 0                                         'sem erros
end if 

if CerDocAnuUsa = -1 then                                   'aspecto para erros ?
   anuTx$ = "Documento com erros"                           'texto a listar
   anuPx  =  20                                             'posicao X
   anuPy  = 240                                             'posicao Y

   PrWIN AJT_B, 0, 0                                        'activar posicao nase
   PrWIN COR_T, 240, 170, 130                               'cor de texto RGB

   PrWIN FON, 75, 1                                         'activar fonte

   PrWIN TX_RO, anuPx,anuPy,45,anuTx$                       'registar informacao

   PrWIN COR_T, 0, 0, 0                                     'activar cor de texto RGB
end if

call DocCerLisDem                                           'listar informacao de demonstracao
end sub


Sub DocCerLisDem 'listar informacao de demonstracao
vTip$ = EmpTip$("TIP")                                      'tipo da empresa
'vTip$ = "DEM"

if vTip$ = "DEM" then                                       'empresa de demonstracao ?
   usaTx$ = "Só para demonstração"                          'texto a listar
   usaPx1  =  15                                            'posicao X1
   usaPy1  = 150                                            'posicao Y1
   usaPx2  = 195                                            'posicao X2
   usaPy2  = usaPy1 + 20                                    'posicao Y2

   PrWIN AJT_B, 0, 0                                        'activar posicao nase
   PrWIN COR_T, 250,  50, 50                                'cor de texto RGB

   PrWIN FON, 40, 1                                         'activar fonte
   PrWin FON, "BOLD+"                                       'activar bold

   PrWIN GR_CX,  usaPx1, usaPy1, usaPx2, usaPy2, 5          'caixa envolvente
   'PrWIN GR_CXR, usaPx1, usaPy1, usaPx2, usaPy2, 5          'caixa envolvente

   PrWIN TX_CTR, usaPx1, usaPy1, usaPx2, usaPy2,usaTx$      'texto centrado

   PrWIN COR_T, 0, 0, 0                                     'activar cor de texto RGB
   PrWin FON, "BOLD-"                                       'desaactivar bold
end if
end sub


Sub DocCerErrPrp 'preparar situacao de erros
CerDocErrUsa = 0                                            'anular situacao de erro

vErrCnt = VarCom("DOC_ERR_CNT")                             'contagem de erros
vErrCtu = VarCom("DOC_ERR_CTU")                             'situacao para conta
vErrArt = VarCom("DOC_ERR_ART")                             'situacao para artigos
vErrGdo = VarCom("DOC_ERR_GDO")                             'situacao para grupo de documentos

'msgbox "", "ERRO",vErrCnt

if vErrCnt > 0 then                                         'ha erros ?
   CerDocErrUsa = 1                                         'activar situacao de erro
end if
end sub


Sub DocCerErrLis 'listar informacao de erros
call DocCerErrPrp                                           'preparar situacao de erros
if CerDocErrUsa = 1 then                                    'documento com erros ?
   usaTx$ = "Documento com erros"                           'texto a listar
   usaPx1  =  15                                            'posicao X1
   usaPy1  = 180                                            'posicao Y1
   usaPx2  = 195                                            'posicao X2
   usaPy2  = usaPy1 + 20                                    'posicao Y2

   PrWIN AJT_B, 0, 0                                        'activar posicao nase
   PrWIN COR_T, 250,  50, 50                                'cor de texto RGB

   PrWIN FON, 40, 1                                         'activar fonte
   PrWin FON, "BOLD+"                                       'activar bold

   PrWIN GR_CX,  usaPx1, usaPy1, usaPx2, usaPy2, 5          'caixa envolvente
   PrWIN TX_CTR, usaPx1, usaPy1, usaPx2, usaPy2,usaTx$      'texto centrado

   PrWIN COR_T, 0, 0, 0                                     'activar cor de texto RGB
   PrWin FON, "BOLD-"                                       'desaactivar bold

   PrWIN FON, 10, 1                                         'activar fonte
   py1 = usaPy2 - 6                                         'posicao Y1
   py2 = usaPy2                                             'posicao Y2

   if vErrCtu <> 0 then                                     'conta com erro ?
      px1 = usaPx1                                          'posicao X1
      px2 = usaPx2 / 2                                      'posicao X2
      usaTx$ = "Verificar conta"                            'informacao

      PrWIN TX_CTR, px1, py1, px2, py2,usaTx$               'texto centrado
   end if

   if vErrArt <> 0 then                                     'artigos erro ?
      px1 = usaPx2 / 2                                      'posicao X1
      px2 = usaPx2                                          'posicao X2
      usaTx$ = "Verificar artigos"                          'informacao

      PrWIN TX_CTR, px1, py1, px2, py2,usaTx$               'texto centrado
   end if

'   PrWIN COR_T, 0, 0, 0                                     'activar cor de texto RGB
end if
end sub


Sub DocCerVarPrpUsa 'preparar variaveis referentes a certificacao - usa certificacao
res$ = EncDocCer$("DOC.PRP", Enc_Mst_Tdoc$, Enc_Mst_Ndoc$)  'preparar dados do documento

'natureza do documento
'CerNatChv$ = EncDocCer$("DOC.NAT")                           'natureza
'CerNatDes$ = ""                                              'descricao da natureza
CerNatChv$ = EncDocCer$("TDO.TSA.COD",Enc_Mst_Tdoc$)         'natureza - codigo
CerNatDes$ = EncDocCer$("TDO.TSA.DES",Enc_Mst_Tdoc$)         'natureza - descricao

'if cerNatChv$ = "FT" then                                   'factura ?
'   CerNatDes$ = "Factura"                                   'descricao da natureza
'end if

'if cerNatChv$ = "FS" then                                   'factura simplificada ?
'   CerNatDes$ = "Factura Simplificada"                      'descricao da natureza
'end if

'if cerNatChv$ = "NC" then                                   'nota de credito ?
'   CerNatDes$ = "Nota de Crédito"                           'descricao da natureza
'end if

'if cerNatChv$ = "ND" then                                   'nota de credito ?
'   CerNatDes$ = "Nota de Débito"                            'descricao da natureza
'end if


'Programa/OLISOFT
ideCer$    = "Emitido por Programa Certificado Numero "     'identificacao de certificaco (base)

'natureza
vNat1$ = "[Natureza: " + CerNatChv$ + "]"                   'identificacao da natureza 1 (sem separacao)
vNat2$ = vNat1$ + " "                                       'identificacao da natureza 2 (com separacao)

'versao 1
CerPgmDesV1$ = ideCer$ + CerPgmNum$                         'certificacao do programa (numero+descricao)
CerPgmDe1V1$ = "Processado por Programa"                    'certificacao do programa (descricao linha 1)
CerPgmDe2V1$ = "Certificado Numero " + CerPgmNum$           'certificacao do programa (descricao linha 2)

'versao 2 (actual)
CerPgmDes$ = ideCer$ + CerPgmNum$                           'certificacao do programa (numero+descricao)
CerPgmDe1$ = "Processado por Programa"                      'certificacao do programa (descricao linha 1)
CerPgmDe2$ = "Certificado Numero " + CerPgmNum$             'certificacao do programa (descricao linha 2)

'Documento
CerDocSit$ = EncDocCer$("DOC.SIT")                          'situacao do documento

if cerDocSit$ = "CER" then                                  'documento certificado ?
   CerDocAss$ = EncDocCer$("DOC.ASI")                       'assinatura do documento (4 digitos)
   CerDocAdi$ = ""                                          'informacao adicional

   'versao 1
   CerPgmDesV1$ = cerDocAss$ + "-" + CerPgmDes$             'certificacao do programa (numero+descricao)
   CerPgmDe1V1$ = cerDocAss$ + "-" + CerPgmDe1$             'certificacao do programa (descricao linha 1)

   'versao 2 (actual)
   CerPgmDes$ = vNat2$ + cerDocAss$ + "-" + CerPgmDes$      'certificacao do programa (numero+descricao)
   CerPgmDe1$ = vNat2$ + cerDocAss$ + "-" + CerPgmDe1$      'certificacao do programa (descricao linha 1)
end if

if cerDocSit$ = "C+A" then                                  'documento certificado e anulado ?
   adi$ = "(Anulado)"                                       'informacao adicional

   CerDocAnu  = 1                                           'activar situacao de anulado
   CerDocAss$ = EncDocCer$("DOC.ASI")                       'assinatura do documento (4 digitos)
   CerDocAdi$ = ""                                          'informacao adicional

   CerDocIde$ = CerDocIde$ + " " + adi$                     'identificacao do documento

   'versao 1
   CerPgmDesV1$ = cerDocAss$ + "-" + CerPgmDes$             'certificacao do programa (numero+descricao)
   CerPgmDe1V1$ = cerDocAss$ + "-" + CerPgmDe1$             'certificacao do programa (descricao linha 1)

   'versao 2 (actual)
   CerPgmDes$ = vNat2$ + cerDocAss$ + "-" + CerPgmDes$      'certificacao do programa (numero+descricao)
   CerPgmDe1$ = vNat2$ + cerDocAss$ + "-" + CerPgmDe1$      'certificacao do programa (descricao linha 1)
end if


if cerDocSit$ = "ANL" then                                  'documento anulado ?
   adi$ = "(Anulado)"                                       'informacao adicional

   CerDocAnu = 1                                            'activar situacao de anulado
   CerDocAss$ = ""                                          'assinatura do documento (4 digitos)
   CerDocAdi$ = ""                                          'informacao adicional

   CerDocIde$ = CerDocIde$ + " " + adi$                     'identificacao do documento
end if

if cerDocSit$ = "CPO" then                                  'documento copia do original ?
   CerDocAss$ = ""                                          'assinatura do documento (4 digitos)
   CerDocAdi$ = "Cópia do documento original"               'informacao adicional

   CerDocIde$ = CerDocIde$                                  'identificacao do documento
end if

if cerDocSit$ = "CPM" then                                  'documento copia manual do original ?
   CerDocAss$ = EncDocCer$("DOC.MAN",Enc_Mst_Tdoc$)         'assinatura do documento manual
   CerDocAdi$ = "Cópia do documento original-" + CerDocAss$ 'informacao adicional

   CerDocIde$ = CerDocIde$                                  'identificacao do documento
end if

if cerDocSit$ = "PEN" then                                  'documento pendente ?
   adi$ = "(Pendente)"                                      'informacao adicional

   CerDocAss$ = "(Pendente)"                                'assinatura do documento (4 digitos)
   CerDocAdi$ = ""                                          'informacao adicional

   CerDocIde$ = CerDocIde$ + " " + adi$                     'identificacao do documento
end if

'CerTdoTip$ = EncDocCer$("TDO.TIP",Enc_Mst_Tdoc$)            'documento tipo SAFT
CerTdoTip$ = EncDocCer$("TDO.NSF",Enc_Mst_Tdoc$)            'documento tipo NSF (nao serve de factura)

if CerTdoTip$ = "NSF" then                                  'nao serve de factura ?
   vCerTdoTip$ = "Este documento não serve de factura"      'documento tipo NSF
else
   vCerTdoTip$ = ""                                         'documento tipo NSF
end if
end sub


Sub DocCerVarPrpNao 'preparar variaveis referentes a certificacao - nao usa certificacao
'MsgBox "","CER","Nao usa"

'Programa/OLISOFT
ideCer$    = "** PROCESSADO POR COMPUTADOR **"              'identificacao de certificaco (nao usa)

'versao 1
CerPgmDesV1$ = ideCer$                                      'certificacao do programa (numero+descricao)
CerPgmDe1V1$ = ideCer$                                      'certificacao do programa (descricao linha 1)
CerPgmDe2V1$ = ""                                           'certificacao do programa (descricao linha 2)

'versao 2 (actual)
CerPgmDes$ = ideCer$                                        'certificacao do programa (numero+descricao)
CerPgmDe1$ = ideCer$                                        'certificacao do programa (descricao linha 1)
CerPgmDe2$ = ""                                             'certificacao do programa (descricao linha 2)

'Documento
CerDocIde$ = Doc_Ide_Nome$                                  'identificacao do documento
'CerDocIde$ = Doc_Ide_Sdoc$                                 'identificacao do documento

if DocRcNum$ <> "" then                                     'ha documento guardado ?
   CerDocNum$ = DocRcNum$                                   'usar documento guardado
else
   CerDocNum$ = FrmNdo$("", Enc_Mst_Tdoc$, Enc_Mst_Ndoc$)   'usar documento corrente
end if

CerDocAss$ = ""                                             'assinatura do documento (4 digitos)
CerDocAdi$ = ""                                             'informacao adicional
end sub


Sub DocCerCpmPrp 'preparar variaveis referentes a certificacao de documentos manuais
'Programa/OLISOFT
ideCer$    = "** PROCESSADO POR COMPUTADOR **"              'identificacao de certificaco (nao usa)

'versao 1
CerPgmDesV1$ = ideCer$                                      'certificacao do programa (numero+descricao)
CerPgmDe1V1$ = ideCer$                                      'certificacao do programa (descricao linha 1)
CerPgmDe2V1$ = ""                                           'certificacao do programa (descricao linha 2)

'versao 2 (actual)
CerPgmDes$ = ideCer$                                        'certificacao do programa (numero+descricao)
CerPgmDe1$ = ideCer$                                        'certificacao do programa (descricao linha 1)
CerPgmDe2$ = ""                                             'certificacao do programa (descricao linha 2)

'Documento
CerDocIde$ = Doc_Ide_Nome$                                  'identificacao do documento
'CerDocIde$ = Doc_Ide_Sdoc$                                 'identificacao do documento

if DocRcNum$ <> "" then                                     'ha documento guardado ?
   CerDocNum$ = DocRcNum$                                   'usar documento guardado
else
   CerDocNum$ = FrmNdo$("", Enc_Mst_Tdoc$, Enc_Mst_Ndoc$)   'usar documento corrente
end if

CerCpmSer$  = TxIde$(Enc_Mst_Opc$,"CER_CPM_SER")            'certificacao - serie para documento manual
CerCpmNum$  = TxIde$(Enc_Mst_Opc$,"CER_CPM_NUM")            'certificacao - numero para documento manual
CerCpmDes$  = CerCpmSer$ + "/" + CpmNum$                    'descricao para documento manual

CerDocAss$ = ""                                             'assinatura do documento (4 digitos)
CerDocAdi$ = ""                                             'informacao adicional
end sub


'------------------------------------------------------------------------------
'#COM - Funcoes comuns para documentos
'------------------------------------------------------------------------------
Sub DocComIdeTip 'identificacao de tipo de documento
dtAno$    = FrmDt$("A4", Doc_Ide_Dtl)              'ano do documento

'vuDocComIde$ = Doc_Ide_Nome$                      'identificacao do documento (inicializar)
'vuDocComIde$ = CerDocIde$                          'identificacao do documento (inicializar)
vuDocComIde$ = EncDocDesCon$("ALT", "#")           'consultar descricao

'msgbox "", "IDE/TIP",dtAno$

if dtAno$ <  "2013" then                           'versao 2012 ?
   chvDes$ = "CER.2012"                            'chave para descricao
   vuDocComIde$ = EncDocDesCon$("ALT", chvDes$)    'consultar descricao
end if

if dtAno$ >= "2013" then                           'versao 2013 ?
   chvDes$ = "CER.2013"                            'chave para descricao
   vuDocComIde$ = EncDocDesCon$("ALT", chvDes$)    'consultar descricao
end if
end sub

##

