Action link per l’aggiunta di clienti in anagrafica

' Action link per l'aggiunta di clienti in anagrafica
' Lo snippet segue questo modello di JSON di esempio
'
'{
'  "Token": "ec161f8b-ba19-4dac-aab0-2ee16ab94391",
'  "Clienti": [
'	{
'	  "TipoCliente": "Ditta",
'	  "ID": 1,
'	  "RagioneSociale": "LEMMA WINE COMPANY",
'	  "Indirizzo": "120 SE MARKET STREET",
'	  "Cap": "97214",
'	  "Citta": "PORTLAND",
'	  "Provincia": "OR",
'	  "Stato": {
'		"ID": "234",
'		"Descrizione": "Stati Uniti",
'		"ISO2": "US",
'		"MembroUE": false
'	  },
'	  "PartIVA": "",
'	  "CodFisc": "",
'	  "Agente": {
'		"ID": "GDV_KN",
'		"RagioneSociale": "KEVIN NATOLI",
'		"Citta": ""
'	  },
'	  "Pagamento": {
'		"ID": "BO90",
'		"Descrizione": "BB 90GG DF"
'	  },
'	  "Email": "",
'	  "Telefono": ""
'	}
'  ]
'}


Dim nomeActionLink As String = "Action Link CLIENTI-FORNITORI"

Dim OK As Boolean = True
Dim esito As String = ""
Dim erroreRequest As String = ""
Dim errcode As Integer
Dim jsonr As String
Dim res As New Newtonsoft.Json.Linq.JObject


Try
  'OTTENGO LA RICHIESTA IN JSON
  Page.Request.InputStream.Seek(0, System.IO.SeekOrigin.Begin)

  Using ReceiveStream As System.IO.Stream = Page.Request.InputStream
    Using ReadStream As System.IO.StreamReader = New System.IO.StreamReader(ReceiveStream, System.Text.Encoding.UTF8)
      jsonr = ReadStream.ReadToEnd()
    End Using
  End Using

  Dim objtmp As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.Linq.JObject.Parse(jsonr)

  Dim token As String = CType(objtmp("Token"), Newtonsoft.Json.Linq.JValue).Value

  Dim tokenIsValid As Boolean = qwlib.WebUtils.CheckToken2(token)

  If tokenIsValid Then
    ' copia il json in una directory locale
    Dim path As String = "C:\dati\Json\Clienti_Fornitori.json"

    Dim writer As New System.IO.StreamWriter(path)

    writer.WriteLine("" & jsonr)
    writer.Close()

    '--------------------------------------------------------------------------------------------------'
    Dim parsedJson As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.Linq.JObject.Parse(jsonr)

    Dim clifor As New QWTable  ' tabella anagrafica clienti/fornitori
    Dim orgcf As New QWTable   ' tabella organigramma clienti/fornitori
    Dim temp As New QWTable    ' vista temporanea

    clifor.DataBase = DB
    orgcf.DataBase = DB
    temp.DataBase = DB

    '------------------------------ CLIENTI------------------------------------------
    ' questo esempio legge solo l'elenco dei clienti dal json
    ' per i fornitori il procedimento è uguale ma il CODICE dovrà iniziare per "F" e dovrà essere spuntato il flag FORNITORE invece che quello CLIENTE

    If Not parsedJson.SelectToken("Clienti") Is Nothing Then
      Dim erroreSalvataggio As String
      Dim CODICE As String

      Dim lunghezzaCodiceAnagrafica As Integer = 6 ' volendo si può scegliere un altro numero: l'importante è che non sia maggiore di 6

      For i As Integer = 0 To parsedJson.SelectToken("Clienti").Count - 1
        erroreSalvataggio = ""

        ' la funzione SqlStr fa l'escaping dei caratteri riservati di SQL
        CODICE = SqlStr("C" & Right("00000" & parsedJson.SelectToken("Clienti[" & i & "].ID").ToString, lunghezzaCodiceAnagrafica))

        clifor.SQL = "select * "
        clifor.SQL += "from CLIFOR "
        clifor.SQL += "where CODICE = " & Chr(39) & CODICE & Chr(39)
        clifor.Active = True

        'SE NON ESISTE UN RECORD CON QUEL CODICE CLIENTE, NE CREO UNO NUOVO
        If Not clifor.RowSet.First() Then
          clifor.BeginAppend()

          clifor.Replace("CODICE", CODICE)
          clifor.Replace("CLIENTE", True)
        End If

        'SALVO LE INFORMAZIONI DEL JSON NELLE VARIE COLONNE DI CLIFOR
        clifor.Replace("RAGSOC", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].RagioneSociale").ToString))
        clifor.Replace("VIA", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Indirizzo").ToString))
        clifor.Replace("CAP", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Cap").ToString))
        clifor.Replace("CITTA", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Citta").ToString))
        clifor.Replace("PROV", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Provincia").ToString))

        If Not parsedJson.SelectToken("Clienti[" & i & "].Stato") Is Nothing Then
          clifor.Replace("NAZIONE", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Stato.Descrizione").ToString))
        End If

        clifor.Replace("PIVA", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].PartIVA").ToString))
        clifor.Replace("CODFISC", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].CodFisc").ToString))
        clifor.Replace("PAGAMENTO", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Pagamento.Descrizione").ToString))
        clifor.Replace("EMAIL", SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Email").ToString))
        clifor.Replace("TELEFONO", SqlStr((parsedJson.SelectToken("Clienti[" & i & "].Telefono").ToString).Replace(" ", "")))

        If Not clifor.SaveRecord(erroreSalvataggio) Then
          OK = False
          esito &= erroreSalvataggio & vbCrLf
          WriteLog(nomeActionLink & vbCrLf & erroreSalvataggio)
        End If

        clifor.Active = False

        'SALVO LE INFORMAZIONI extra DEL JSON NELLE VARIE COLONNE DI ORGCF
        If Not parsedJson.SelectToken("Clienti[" & i & "].Agente") Is Nothing Then
          orgcf.SQL = "select * "
          orgcf.SQL += "from ORGCF "
          orgcf.SQL += "where CODICE = " & Chr(39) & CODICE & Chr(39)
          orgcf.Active = True

          If Not orgcf.RowSet.First() Then
            orgcf.BeginAppend()

            orgcf.Replace("CODICE", CODICE)
          End If

          Dim NOME_AGENTE As String = SqlStr(parsedJson.SelectToken("Clienti[" & i & "].Agente.RagioneSociale").ToString)

          temp.SQL += "select case "
          temp.SQL += "when (select count(*) from ORGCF where CODICE = " & Chr(39) & CODICE & Chr(39)
          temp.SQL += " and DESCPER = " & Chr(39) & NOME_AGENTE & Chr(39) & ") > 0 then isnull(max(CODORG), 0) "
          temp.SQL += "else -1 "
          temp.SQL += "end"
          temp.SQL += "from ORGCF "
          temp.Active = True

          If temp.RowSet.Fields(1).Value = -1 Then
            orgcf.Replace("CODORG", 1)
          Else
            orgcf.Replace("CODORG", temp.RowSet.Fields(1).Value)
          End If

          temp.Active = False

          orgcf.Replace("DESCPER", NOME_AGENTE)
          orgcf.Replace("DESCRUO", "AGENTE")

          If Not orgcf.SaveRecord(erroreSalvataggio) Then
            OK = False
            esito += erroreSalvataggio & vbCrLf
            WriteLog(nomeActionLink & vbCrLf & erroreSalvataggio)
          End If

          orgcf.Active = False
        End If
      Next
    Else
      esito += "Non ci sono Clienti !" & vbCrLf
      WriteLog(nomeActionLink & vbCrLf & esito)
    End If

    orgcf.Dispose()
    temp.Dispose()
  Else
    errcode = 1
    esito += "Token non valido !" & vbCrLf
  End If

  If Not String.IsNullOrEmpty(esito) Then
    OK = False
  End If
Catch e As Exception
  OK = False
  errcode = -1
  erroreRequest = e.Message & vbCrLf & e.StackTrace
  WriteLog(nomeActionLink & vbCrLf & erroreRequest)
End Try

Dim ret_obj = New With {.ResultCode = errcode, .Result = IIf(OK, "OK", "KO"), .ErrResult = esito & vbCrLf & vbCrLf & erroreRequest}

Return Newtonsoft.Json.JsonConvert.SerializeObject(ret_obj)