'Nome       : StcArtReg.scr
'Tipo       : AMX OPC
'Data       : 2016/10/02
'Versao     : 1.0
'Descricao  : STC - Registar artigos - Script

'==============================================================================
'#VER - Historia de modificacoes
'==============================================================================
'- Versao : 1.0a  ____/__/__ --------------------------------------------------
'Disponibilizar de novos campos

'- Versao : 1.0   2016/04/28 --------------------------------------------------
'Versao base


'==============================================================================
#VBS:TX - VB Script
'==============================================================================
'- 13 -     - info
'- 25 ----------------->'
'- 28 -------------------->'
'- 40 -------------------------------->'
'- 43 ----------------------------------->'
'- 46 -------------------------------------->'
'- 49 ----------------------------------------->'
'- 52 -------------------------------------------->'
'- 55 ----------------------------------------------->'
'- 58 -------------------------------------------------->'
'- 61 ----------------------------------------------------->'
'- 64 -------------------------------------------------------->'
'- 67 ----------------------------------------------------------->'
'- 70 -------------------------------------------------------------->'


'------------------------------------------------------------------------------
'- variaveis globais ----------------------------------------------------------
'------------------------------------------------------------------------------
'variaveis de StcMst
'Dim StcMstRecIde                       'identificacao do record
'Dim StcMstRecVal                       'validade do record
'Dim StcMstRecSit                       'situacao do record
'Dim StcMstRecLoc                       'controlo de locks
Dim StcMstOpc                          'campos opcionais
Dim StcMstArt                          'codigo artigo
Dim StcMstNom1                         'nome do artigo
Dim StcMstCodAux1                      'codigo auxiliar 1
Dim StcMstCodAux2                      'codigo auxiliar 2
Dim StcMstCodBar                       'codigo barras (EAN)
Dim StcMstNom2                         'nome suplementar
Dim StcMstCodSbt                       'artigo de substituicao
Dim StcMstUnid                         'unidade
Dim StcMstLoc                          'localizacao
Dim StcMstTpArt                        'tipo de artigo
Dim StcMstTxl                          'texto livre
Dim StcMstPais                         'pais de origem
Dim StcMstGrupo                        'codigo de grupo
Dim StcMstUnForm                       'Unidades por formula
Dim StcMstPv1                          'preco de venda 1
Dim StcMstPv2                          'preco de venda 2
Dim StcMstPv3                          'preco de venda 3
Dim StcMstPv4                          'preco de venda 4
Dim StcMstPrcOrg                       'preco na origem
Dim StcMstTarr                         'tipo  de arredondamento
Dim StcMstVarr                         'valor de arredondamento
Dim StcMstPrcGrp                       'grupo de preco
Dim StcMstIva                          'codigo de IVA
Dim StcMstNumDec                       'codigo de decimais
Dim StcMstCmvTx                        'comissao p/ vendedor
Dim StcMstDesco                        'desconto
Dim StcMstProm                         'desconto de promocao
Dim StcMstDesAcm                       'acumulacao de descontos
Dim StcMstCtpTip                       'contrapartida contab.
Dim StcMstRapTip                       'rappel
Dim StcMstRecLst                       'tipo recolha/listagem
Dim StcMstPenc                         'ponto de encomenda
Dim StcMstSmin                         'stock minimo
Dim StcMstSmax                         'stock maximo
Dim StcMstRepoQu                       'stock de reposicao
Dim StcMstRepoTmp                      'tempo de reposicao
Dim StcMstRepoAlg                      'algoritmo de reposicao
Dim StcMstSazon                        'codigo sazonalidade
Dim StcMstFrnCt                        'conta fornecedor normal
Dim StcMstFrnUltN                      'conta ultimo fornecedor
Dim StcMstFrnCod                       'artigo no fornecedor
Dim StcMstFrnDescr                     'descricao no fornecedor
Dim StcMstFrnDesco                     'desconto do fornecedor
Dim StcMstDtIni                        'data de inicio
Dim StcMstMedTip                       'calculo medidas
Dim StcMstMedTxt                       'medidas
Dim StcMstPeso                         'peso
Dim StcMstFcnv                         'factor de conversao
Dim StcMstUsaArz                       'usa armazens
Dim StcMstUsaLotes                     'usa lotes
Dim StcMstUsaTaras                     'usa taras/tipo
Dim StcMstUsaQu2                       'usa quantidade 2


'==============================================================================
'- Funcoes de suporte - Comuns ------------------------------------------------
'==============================================================================
'------------------------------------------------------------------------------
'- Funcoes para numero --------------------------------------------------------
'------------------------------------------------------------------------------
Sub NumCnv(vtx, num) 'conversao em numero
'vtx        - valor/texto
'num        - valor numero

on error resume next                   'controlar erros

num=0                                  'assume valor zero
if vtx = "" then
   num = 0                             'valor zero
else
   num = cDbl(vtx)                     'conversao em numero
end if

on error goto 0                        'terminar controlo de erros
end sub


Sub NumTxt(num, dig, ce, tx) 'converter numero em texto
'num        - numero a converter (pode estar em texto)
'dig        - numero de digitos
'ce         - caractere de enchimento (para numero >=0)
'tx         - texto

'NOTA: Se o numero for negativo forca o enchimento a espacos

on error resume next                   'controlar erros

tmp=0                                           'assume valor zero

tmp=cDbl(num)                                   'copiar
tx = LTrim(cStr(tmp))                           'converter para texto
If tmp < 0 Then                                 'negativo ?
   tx = Right(String(dig, " ") + tx, dig)       'ajustar tamanho
Else                                            'zero ou positivo
   tx = Right(String(dig, ce) + tx, dig)        'ajustar tamanho
End If

on error goto 0                        'terminar controlo de erros
End Sub


Sub NumCnvTxt(num, dig, ce, tx) 'converter numero em texto
'num        - numero a converter (pode estar em texto)
'dig        - numero de digitos  (>0 enche a esq. , <0 enche a dir.)
'ce         - caractere de enchimento (para numero >=0)
'tx         - texto

on error resume next                   'controlar erros

call TxtCnv(num, ntx)                  'conversao em texto
ndi = abs(dig)                         'numero de digitos

If dig > 0 Then                        'enchimento a esquerda ?
   tmp = String(ndi, ce) + ntx         'enchimento a esquerda
   tx = Right(tmp, ndi)                'ajustar tamanho
Else
   tmp = ntx + String(ndi, ce)         'enchimento a direita
   tx = left(tmp, ndi)                 'ajustar tamanho
End If

on error goto 0                        'terminar controlo de erros
End Sub


'------------------------------------------------------------------------------
'- Funcoes para texto ---------------------------------------------------------
'------------------------------------------------------------------------------
Sub TxtCnv(vl, vtx) 'conversao em texto
'vl         - valor a converter
'vtx        - valor em texto

on error resume next                   'controlar erros

vtx = ""                               'assume nulo
vtx = Trim(cStr(vl))                   'converter para texto

on error goto 0                        'terminar controlo de erros
end sub


Sub TxtSep(tx, sp, txs) 'separar texto
'tx         - texto original/residual
'sp         - separador
'txs        - texto separado

p = InStr(tx, sp)                      'pesquisa do separador
If p <> 0 Then                         'encontrou separador
   txs = Left(tx, p - 1)               'texto separado
   tx  = Mid(tx, p + 1)                'texto residual
Else                                   'nao encontrou separador
   txs = tx                            'texto separado (tudo)
   tx  = ""                            'texto residual (nada)
End If
End Sub


'==============================================================================
'- Funcoes para artigo --------------------------------------------------------
'==============================================================================
'------------------------------------------------------------------------------
'- Preparar novo artigo -------------------------------------------------------
'------------------------------------------------------------------------------
Function ArtCriPrp(arg) 'executar funcao
'arg        - argumento (nao usado)

'inicializar resultado
'res = -1                               'assume cancelado
'res =  0                               'assume invalido
res =  1                               'assume valido

'msgbox arg

'executar
with VbsPub
.MSG_CmpIni ""                         'inicializar mensagem

StcMstArt = .TXT_Ajc(StcMstArt)        'ajustar codigo do artigo
end with

'validar codigo do artigo
artOk = 0                              'assume codigo invalido
tx1 = left(StcMstArt, 1)               'separar digito inicial
'msgbox tx1

if tx1 >= "A" and tx1 <= "Z" then      'comeca por letra ?
   artOk = 1                           'codigo valido
end if

if tx1 >= "0" and tx1 <= "9" then      'comeca por numero ?
   artOk = 1                           'codigo valido
end if

if artOk = 0 then                      'artigo invalido ?
   res = 0                             'invalidar resultado

   with VbsPub
   .MSG_CmpJun "L", "Codigo de artigo inválido"  'juntar informacao a mensagem
   end with
else
   select case tx1
'- 25 ----------------->'
   case "M"             'artigo com medidas
     'Regua             >123456789.123456789.<
     'Formato do artigo >M111222333<

      m1 = mid(StcMstArt, 2, 3)              'separar medida 1
      m2 = mid(StcMstArt, 5, 3)              'separar medida 2
      m3 = mid(StcMstArt, 8, 3)              'separar medida 3
      mr = mid(StcMstArt,11)                 'texto residual

      with VbsPub
      txm = ""                               'inicializar texto de medidas    
      txm = .TXT_JunSep(txm, "x", m1)        'juntar medida 1
      txm = .TXT_JunSep(txm, "x", m2)        'juntar medida 2
      txm = .TXT_JunSep(txm, "x", m3)        'juntar medida 3

      if m1 = "" then                        'codigo sem medidas ?
         .MSG_CmpJun "L", "Código não permite gerar medidas"            'juntar informacao a mensagem
         res = -1                            'invalidar resultado
      else
         tpm = 1                             'tipo de medidas
         call NumCnv(m1, num)                'conversao em numero

         'msgbox "Med 1 >" & m1 & "< " & num

         if num = 0 then                     'medida invalida ?
            .MSG_CmpJun "L", "Medida 1 inválida (" & m1 & ")"            'juntar informacao a mensagem
         end if
      end if

      if m2 <> "" then                       'codigo com 2 medidas ?
         tpm = 2                             'tipo de medidas
         call NumCnv(m2, num)                'conversao em numero
         if num = 0 then                     'medida invalida ?
            .MSG_CmpJun "L", "Medida 2 inválida (" & m2 & ")"            'juntar informacao a mensagem
         end if
      end if

      if m3 <> "" then                       'codigo com 3 medidas ?
         tpm = 3                             'tipo de medidas
         call NumCnv(m3, num)                'conversao em numero
         if num = 0 then                     'medida invalida ?
            .MSG_CmpJun "L", "Medida 3 inválida (" & m3 & ")"            'juntar informacao a mensagem
         end if
      end if

      if mr <> "" then
         .MSG_CmpJun "L", "Medidas inválidas (Residual: " & mr & ")"     'juntar informacao a mensagem
         'res = 0                             'invalidar resultado
         res = -1                             'invalidar resultado - cancelar
      end if
      end with

      StcMstNom1   = "Medidas " & txm  'nome
      StcMstNom2   = "Usa medidas"     'nome suplementar
      StcMstMedTip = tpm               'calculo medidas
      StcMstMedTxt = txm               'medidas
      StcMstRecLst = "MED"             'tipo recolha/listagem
'- 40 -------------------------------->'

   case else                 'outros - normal
      'nada a executar
   end select
end if

'informar utilizador
if res <> 1 then                       'ha erro ?
   with VbsPub
   '.MSG_Ver "N", "Erro no artigo", "Verifique o erro"                                'mostrar mensagem - normal
   '.MSG_Ver "L", "Erro no artigo", "Verifique os erro:","Erro 1","Erro 2","Erro N"   'mostrar mensagem - varias linhas

   .MSG_CmpVer "X", "Erro no artigo"   'mostrar mensagem de erro
   end with
end if

'terminar
'- 40 -------------------------------->'
ArtCriPrp = res                        'devolver resultado
end function


'------------------------------------------------------------------------------
'- Preparar para registar artigo ----------------------------------------------
'------------------------------------------------------------------------------
Function ArtRegPrp(arg) 'executar funcao
'arg        - argumento (nao usado)

'inicializar resultado
'res = 0                                'assume invalido
res = 1                                'assume valido

'executar
with VbsPub
.MSG_CmpIni ""                         'inicializar mensagem
end with


'validar codigo do artigo
artOk = 1                              'assume codigo valido
tx1 = left(StcMstArt, 1)               'separar digito inicial
'msgbox tx1

'if tx1 >= "A" and tx1 <= "Z" then      'comeca por letra ?
'   artOk = 1                           'codigo valido
'end if

'if tx1 >= "0" and tx1 <= "9" then      'comeca por numero ?
'   artOk = 1                           'codigo valido
'end if

if tx1 <> "M" then                      'nao comeca por 'M'
   artOk = 0                            'codigo invalido
   with VbsPub
   .MSG_CmpJun "L", "Só pode alterar artigos com medidas (Código: " & StcMstArt & ")"   'juntar informacao a mensagem
   end with
end if

if artOk = 0 then                      'artigo invalido ?
   res = 0                             'invalidar resultado
else
   res = 1                             'validar resultado
end if

'informar utilizador
if res <> 1 then                       'ha erro ?
   with VbsPub
   .MSG_CmpVer "X", "Erro no artigo"   'mostrar mensagem de erro
   end with
end if

'terminar
'- 40 -------------------------------->'
ArtRegPrp = res                        'devolver resultado
end function

##

