Option Explicit

' System.Data.SqlClient

' Project classification script

Const CutomerBTWNumberNotAllowed = "285007815, NL810101683B01"
Const InvCreditIndicator = "Credit"
Const InvDebitIndicator = "Invoice"

'# Create the global variables for the database lookup dialogue
'# The variable for the ODBC needs to be global,
'# so that the connection to the DNS is only opened once
Global g_oODBC As New DatabaseDialog.DBLookupODBC

'Access
   'Const cDSN = "Driver={Microsoft Access Driver (*.mdb)};Dbq=D:\Projects\Soest\KTM_Invoice_Soest\Database\cred_decade.mdb;Uid=Admin;Pwd;"
   'Const cSupplierTableName = "Amber"
   'Const cSupplierVATColumnName = "D"

'Oracle
   'Const cDSN = "Driver={Microsoft ODBC for Oracle};Server=USSyntheticCompanyAddresses;Uid=myUsername;Pwd=myPassword;"
   Const cDSN = "DSN=v_leverancier;Uid=verseon;Pwd=manager;"
   Const cSupplierTableName = "v_leverancier"
   Const cSupplierVATColumnName = "NAWBANKREKENING"

   'Oracle
   'Const cDSN = "Driver={Microsoft ODBC for Oracle};Server=USSyntheticCompanyAddresses;Uid=myUsername;Pwd=myPassword;"
   'Const cDSN = "DSN=VerseonLookup;Uid=myUsername;Pwd=myPassword;"
   'Const cTableName = "USSyntheticCompanyAddresses"

'MSSql
   'Const cDSN = "Provider=SQLOLEDB;Server=server;Database=ERP_Conn;UID=User;PWD=pass;"
   'Const cTableName = "Suppliers"

' do we check the invoice values or can we stop now ?
Dim CheckFact As String



' extraction script for class Invoice

Private Sub GetValidate_VatID(alwayscheck As Boolean,pXDoc As CASCADELib.CscXDocument, pField As CASCADELib.CscXDocField)

  Dim oResult() As String    '# String array to contain the record set result from the Fuzzy and the ODBC lookup selection
  Dim oRequest(4) As String    '# 5 omdat 0..4

  If pField.Text <> "" Then
    oRequest(0) = pField.Text    '# 0 is dus de 1e kolom uit de DB
  'Else
  '  oRequest(3) = "%"
  'End If

  ' MsgBox CStr(pField.ExtractionConfident) & CStr(pField.Valid) & CStr(pField.Confidence)

  If (pField.Confidence = 0) Or (alwayscheck = True) Then

     ' handle field here
     g_oODBC.VisibleColumns = "0;1;2;3;4"    '# de veld nummers die we laten zien
     g_oODBC.DialogCaption = "Leveranciers"    '# titel
     g_oODBC.GroupBoxCaption = "Resultaat uit leveranciers ( % is joker teken )"        '# groep titel

     g_oODBC.InitialQueryVals = oRequest    '# zoekargument
     g_oODBC.SearchImmediately = True    '# direct zoeken

     'Access -> g_oODBC.DatabaseType = 0 (Default), Oracle -> g_oODBC.DatabaseType = 1
     g_oODBC.DatabaseType = 1

     oResult = g_oODBC.ShowDialog (cDSN, cSupplierTableName)
     If UBound(oResult) <> -1 And UBound(oResult)>0 Then
       SetVendorFields pXDoc, oResult
     Else
       ValidationForm_AfterFieldChanged pXDoc, pField
     End If
   End If
   End If
End Sub

'# ================================================================================================================
'# Set the fields for the selection from the alternatives list
'# ================================================================================================================
Private Sub SetVendorFields (ByVal pXDoc As CASCADELib.CscXDocument, ByRef Recordset() As String)
   Dim oField As CscXDocField

   Set oField = pXDoc.Fields.ItemByName("VendorID"):    SetVendorField oField, Recordset(1)
   Set oField = pXDoc.Fields.ItemByName("VendorName"):  SetVendorField oField, Recordset(2)
   Set oField = pXDoc.Fields.ItemByName("VendorClass"): SetVendorField oField, Recordset(4)
   Set oField = pXDoc.Fields.ItemByName("VatID"):       SetVendorField oField, Recordset(0)

End Sub


Private Function GetProperAlternativeFromDatabase(ByRef pField As CASCADELib.CscXDocField, ColumnName As String, TableName As String) As String
  Dim cnn As ADODB.Connection
  Dim rs As ADODB.Recordset
  Dim Result As String
  Dim a As Integer
  Dim Selectstr As String
  'Dim x As Field

  Result = ""    '  pField.Text

  ' Find out If there are multiple items found otherwise there will be no choice , set value to 1
  ' Currently set to 0 to make every result trigger the lookup
  If  pField.Alternatives.Count > 0 Then
     Set cnn = New ADODB.Connection

   ' Open a connection by referencing the ODBC driver.
     cnn.ConnectionString = cDSN
     cnn.Open

   ' Check to see if the default value is allowed, otherwise remove it imediately
   If InStr(CutomerBTWNumberNotAllowed, pField.Text) > 0 Then
     pField.Text = ""
   End If

   ' search the various alternatives
   For a=0 To pField.Alternatives.Count-1

   ' check if the alternative is allowed, otherwise skip it
   If InStr(CutomerBTWNumberNotAllowed, pField.Alternatives(a).Text)=0 Then

     'If Len(pField.Alternatives(a).Text)= 9 Then
      'pField.Alternatives(a).Text = "0" + pField.Alternatives(a).Text
     'End If
     If Len(pField.Alternatives(a).Text)= 14 And Left(pField.Alternatives(a).Text, 2)= "NL" And Mid(pField.Alternatives(a).Text,12,1) = "8" Then
      pField.Alternatives(a).Text = Left(pField.Alternatives(a).Text,11) + "B" + Right(pField.Alternatives(a).Text,2)
     End If

     ' Get info from the database
     Selectstr = "Select "+ColumnName+" from " +TableName+" WHERE " + ColumnName +" = '"+ pField.Alternatives(a).Text+ "'"

     Set rs = New ADODB.Recordset
                         '      Set rs = cnn.Execute( Selectstr )
     rs.Open(Selectstr,cnn)

     ' do we have a hit ?
     If rs.EOF = False Then
       Result=pField.Alternatives(a).Text
       pField.InitFromAlternative(a, Nothing)
       rs.Close
       Exit For
     End If

     rs.Close
   End If
   Next

  ' Close the connection.
  cnn.Close
  End If

  If Result = "" Then
     pField.Text = ""
     pField.Confidence = 0
  Else
     pField.Confidence = 1
  End If

  GetProperAlternativeFromDatabase = Result
End Function

Private Sub Documenttype_AfterExtract(ByRef pXDoc As CASCADELib.CscXDocument, ByRef pField As CASCADELib.CscXDocField)
   If pField.Text = "Invoice" Then
      pField.Text = "0"
   Else
      If pField.Text = "Credit" Then
         pField.Text = "1"
      End If
   End If
'MsgBox CStr(pField.Text)
End Sub

'Private Sub Jaar_AfterExtract(ByRef pXDoc As CASCADELib.CscXDocument, ByRef pField As CASCADELib.CscXDocField)
'   pField.Text = Left(pField.Text,4)

'End Sub

'Private Sub Periode_AfterExtract(ByRef pXDoc As CASCADELib.CscXDocument, ByRef pField As CASCADELib.CscXDocField)
'   pField.Text = Mid(pField.Text,6,2)
'End Sub

Private Sub VatID_AfterExtract(ByRef pXDoc As CASCADELib.CscXDocument, ByRef pField As CASCADELib.CscXDocField)
    '' find out which Field we are currently serving
    If pField.Name = "VatID" Then
       GetProperAlternativeFromDatabase(pField, cSupplierVATColumnName, cSupplierTableName)
    End If
End Sub

Private Sub ValidationForm_AfterFieldConfirmed(pXDoc As CASCADELib.CscXDocument, pField As CASCADELib.CscXDocField)
  If pField.Name = "VatID" Then
    Call GetValidate_VatID(False, pXDoc, pField)
  End If

  If pField.Name = "InvoiceType" Then
    Call CheckInvoiceParameters(pXDoc)
  End If

  If pField.Text = "" Then
    Select Case pField.Name
      Case "SubTotal", "NetAmount0", "NetAmount1", "TaxAmount1", "TaxRate1", "NetAmount2", "TaxAmount2", "TaxRate2"
        pField.Text = "0,00"
    End Select
  End If
End Sub

Private Sub ValidationForm_DocumentLoaded(pXDoc As CASCADELib.CscXDocument)
   Dim pField As CASCADELib.CscXDocField

   Set pField = pXDoc.Fields.ItemByName("VatID")
   If pField.Text <> "" Then
     Call GetValidate_VatID(True, pXDoc, pField)
   Else
      SetRed(pField)
   End If
End Sub



Private Sub ValidationForm_FieldGotFocus(ByVal pXDoc As CASCADELib.CscXDocument, ByVal pField As CASCADELib.CscXDocField)
  If pField.Name = "VatID" Then
    Call GetValidate_VatID(True, pXDoc, pField)
  End If
  Call CheckInvoiceParameters(pXDoc)
End Sub

Private Sub ValidationForm_AfterFieldChanged(ByVal pXDoc As CASCADELib.CscXDocument, ByVal pField As CASCADELib.CscXDocField)
   Select Case pField.Name
      Case "VatID", "InvoiceType"
         SetRed(pField)
   End Select
End Sub

Private Sub SetVendorField(ByVal pField As CASCADELib.CscXDocField, ByVal sValue As String)
   pField.Text = sValue
   SetGreen(pField)
End Sub


Function SetGreen(ByVal pField As CASCADELib.CscXDocField)
  pField.Confidence = 1
  pField.ExtractionConfident = True
  pField.Valid = True
End Function

Function SetRed(ByVal pField As CASCADELib.CscXDocField)
  pField.Confidence = 0
  pField.Valid = False
  pField.ExtractionConfident = False
End Function

Function CheckAmountSign(pDocType As CASCADELib.CscXDocField, pAmount As CASCADELib.CscXDocField, fValue As Currency) As Currency
   Dim ResultFieldValue As Currency

   ResultFieldValue = fValue

   If ((pDocType.Text = InvCreditIndicator) And (fValue > 0)) Or ((pDocType.Text = InvDebitIndicator) And (fValue < 0)) Then
     ResultFieldValue = fValue * -1
     pAmount.Text = CStr(fValue)
     SetRed(pDocType)
   End If

   CheckAmountSign = ResultFieldValue
End Function




Rem ========================================================================
Rem
Rem Check Invoice Parameters, Check invoice totals for all fields and gives individual responce
Rem Ivar Snaaijer BMConsultants 20080610
Rem
Rem ========================================================================

Function CheckInvoiceParameters(ByVal pXDoc As CASCADELib.CscXDocument)
  Dim pSubTotal As CASCADELib.CscXDocField
  Dim pFaktBtw1 As CASCADELib.CscXDocField
  Dim pFaktBtw2 As CASCADELib.CscXDocField
  Dim pTaxRate1 As CASCADELib.CscXDocField
  Dim pTaxRate2 As CASCADELib.CscXDocField
  Dim pNetto0 As CASCADELib.CscXDocField
  Dim pNetto1 As CASCADELib.CscXDocField
  Dim pNetto2 As CASCADELib.CscXDocField
  Dim pFaktTot As CASCADELib.CscXDocField
  Dim pSupplierName As CASCADELib.CscXDocField

  Dim pBarCode As CASCADELib.CscXDocField
  Dim pBankNr As CASCADELib.CscXDocField
  Dim pVendID As CASCADELib.CscXDocField
  Dim pVendCur As CASCADELib.CscXDocField
  Dim pVendClass As CASCADELib.CscXDocField
  Dim pComp As CASCADELib.CscXDocField
  Dim pOrdNr As CASCADELib.CscXDocField
  Dim pFactNr As CASCADELib.CscXDocField
  Dim pFaktDt As CASCADELib.CscXDocField
  Dim pDocType As CASCADELib.CscXDocField
  Dim pBTWTotaal As CASCADELib.CscXDocField

  Dim TmpSubTotal As Currency
  Dim TmpFaktBtw1 As Currency
  Dim TmpFaktBtw2 As Currency
  Dim TmpNetto0 As Currency
  Dim TmpNetto1 As Currency
  Dim TmpNetto2 As Currency
  Dim TmpFaktTot As Currency
  Dim TmpFaktBtwC1 As Currency
  Dim TmpFaktBtwC2 As Currency
  Dim TmpBTWTotaal As Currency
  Dim btw1 As Currency
  Dim btw2 As Currency
  Dim btwDeviation As Currency

  ' System defaults
  btw1 = 6
  btw2 = 19
  btwDeviation = 0.0055

  ' Get information from the form
  Set pFaktBtw1     = pXDoc.Fields.ItemByName("TaxAmount1")
  Set pFaktBtw2     = pXDoc.Fields.ItemByName("TaxAmount2")
  Set pNetto0       = pXDoc.Fields.ItemByName("NetAmount0")
  Set pNetto1       = pXDoc.Fields.ItemByName("NetAmount1")
  Set pNetto2       = pXDoc.Fields.ItemByName("NetAmount2")
  Set pSubTotal     = pXDoc.Fields.ItemByName("SubTotal")
  Set pFaktTot      = pXDoc.Fields.ItemByName("Total")
  Set pTaxRate1     = pXDoc.Fields.ItemByName("TaxRate1")
  Set pTaxRate2     = pXDoc.Fields.ItemByName("TaxRate2")
  Set pSupplierName = pXDoc.Fields.ItemByName("VendorName")
  Set pBarCode      = pXDoc.Fields.ItemByName("Barcode")
  Set pBankNr       = pXDoc.Fields.ItemByName("VatID")
  Set pVendID       = pXDoc.Fields.ItemByName("VendorID")
  Set pVendCur      = pXDoc.Fields.ItemByName("Currency")
  Set pOrdNr        = pXDoc.Fields.ItemByName("OrderNumber")
  Set pFactNr       = pXDoc.Fields.ItemByName("InvoiceNumber")
  Set pFaktDt       = pXDoc.Fields.ItemByName("InvoiceDate")
  Set pDocType      = pXDoc.Fields.ItemByName("Documenttype")
  Set pBTWTotaal    = pXDoc.Fields.ItemByName("BTWTotaal")

  TmpFaktBtw1 = 0
  TmpFaktBtw2 = 0
  TmpSubTotal = 0
  TmpNetto0 = 0
  TmpNetto1 = 0
  TmpNetto2 = 0

  If pFaktBtw1.Text <> "" Then TmpFaktBtw1 = CDbl(pFaktBtw1.Text)
  If pFaktBtw2.Text <> "" Then TmpFaktBtw2 = CDbl(pFaktBtw2.Text)
  If pFaktTot.Text  <> "" Then TmpFaktTot  = CDbl(pFaktTot.Text)
  If pSubTotal.Text <> "" Then TmpSubTotal = CDbl(pSubTotal.Text)
  If pNetto0.Text   <> "" Then TmpNetto0   = CDbl(pNetto0.Text)
  If pNetto1.Text   <> "" Then TmpNetto1   = CDbl(pNetto1.Text)
  If pNetto2.Text   <> "" Then TmpNetto2   = CDbl(pNetto2.Text)

  If pTaxRate1.Text <> "" Then btw1        = CDbl(pTaxRate1.Text)
  If pTaxRate2.Text <> "" Then btw2        = CDbl(pTaxRate2.Text)

  ' Default Results
  TmpFaktBtwC1 = ( TmpNetto1 / 100 ) * btw1
  TmpFaktBtwC2 = ( TmpNetto2 / 100 ) * btw2
  pBTWTotaal.Text = CStr(CDbl(pFaktBtw1.Text) + CDbl(pFaktBtw2.Text))
  TmpBTWTotaal = CDbl(pBTWTotaal.Text)
MsgBox pBTWTotaal.Text+" : "+pFaktTot.Text
  ' Suppliername should be filled

  If pSupplierName.Text = "" Then
     SetRed(pSupplierName)
  End If

  ' Check Credit or Invoice type
   If (UCase(Left(pDocType.Text,2)) = "CR") Then
     pDocType.Text = "1"
   Else
     pDocType.Text = "0"
   End If

   ' Check totals

   If ((TmpSubTotal + TmpBTWTotaal) = TmpFaktTot) And TmpFaktTot <> 0 Then
     SetGreen(pSubTotal)
     SetGreen(pBTWTotaal)
   Else
     SetRed(pSubTotal)
     SetRed(pBTWTotaal)
   End If

'   If ((TmpNetto0 + TmpNetto1 + TmpNetto2) = TmpSubTotal) Then
'     SetGreen(pNetto0)
'     SetGreen(pNetto1)
'     SetGreen(pNetto2)
'     SetGreen(pSubTotal)
'   Else
'     SetRed(pNetto0)
'     SetRed(pNetto1)
'     SetRed(pNetto2)
'     SetRed(pSubTotal)
'   End If

  ' Check Relation between invoiceTotals and VAT lines (Low VAT)

'  If ((TmpFaktBtwC1 > (TmpFaktBtw1 - btwDeviation)) And (TmpFaktBtwC1 < (TmpFaktBtw1 + btwDeviation)) ) Then
'     SetGreen(pFaktBtw1)
'     SetGreen(pNetto1)
'     SetGreen(pTaxRate1)
'  Else
'     SetRed(pFaktBtw1)
'     SetRed(pNetto1)
'     SetRed(pTaxRate1)
'  End If

  ' Check Relation between invoiceTotals and VAT lines (High VAT)

 '  If ((TmpFaktBtwC2 > (TmpFaktBtw2 - btwDeviation))   And (TmpFaktBtwC2 < (TmpFaktBtw2 + btwDeviation)) ) Then
'      SetGreen(pFaktBtw2)
  '   SetGreen(pNetto2)
  '   SetGreen(pTaxRate2)
  'Else
  '   SetRed(pFaktBtw2)
  '   SetRed(pNetto2)
  '   SetRed(pTaxRate2)
  ' End If

  ' If needed change value of totals to reflect Credit invoice

'  CheckAmountSign(pDocType, pFaktBtw1, TmpFaktBtw1)
'  CheckAmountSign(pDocType, pFaktBtw2, TmpFaktBtw2)
'  CheckAmountSign(pDocType, pFaktTot,  TmpFaktTot)
'  CheckAmountSign(pDocType, pSubTotal, TmpSubTotal)
'  CheckAmountSign(pDocType, pNetto0,   TmpNetto0)
'  CheckAmountSign(pDocType, pNetto1,   TmpNetto1)
'  CheckAmountSign(pDocType, pNetto2,   TmpNetto2)

  If pFaktTot.Text = "" Then SetRed(pFaktTot)

   CustomerSpecific(pXDoc)
End Function


Function CustomerSpecific(ByVal pXDoc As CASCADELib.CscXDocument)
  Dim pFaktDt As CASCADELib.CscXDocField
  Dim pJaar As CASCADELib.CscXDocField
  Dim pPeriode As CASCADELib.CscXDocField
  Dim pBoekdatum As CASCADELib.CscXDocField

  Set pFaktDt       = pXDoc.Fields.ItemByName("InvoiceDate")
  Set pJaar       = pXDoc.Fields.ItemByName("Jaar")
  Set pPeriode       = pXDoc.Fields.ItemByName("Periode")
  Set pBoekdatum       = pXDoc.Fields.ItemByName("Boekdatum")


   If pFaktDt.Text <> "" Then
      pJaar.Text  = Left(pFaktDt.Text ,4)
      pPeriode.Text  = Mid(pFaktDt.Text ,6,2)
   End If
   pBoekdatum.Text = Format(Date,"yyyy-mm-dd")
End Function

//MsgBox pBTWTotaal.Text+" : "+pFaktTot.Text+" : "+pFaktBtw1.Text+" : "+CStr(CDbl(pFaktBtw1.Text))



Gesponsorde koppelingen