Don Paypal

 

Accueil Dolibarr Actualités Récupération de données dans Dolibarr

Récupération de données dans Dolibarr

Dans le cadre d'une intégration de dolibarr chez un client, il m'a été demandé de récupérer des listes d'historiques
de clients, de facturations et d'encaissements.
Mon client avait plusieurs feuilles excel contenant ses informations, elles avaient le format suivant :
 
Une version de ce document peut se trouver ici : RecupDolibarr.xls

Voici le source du script vbs utilisée pour cette reprise

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
' importation des données à partir des encaissements saisie dans un fichier XLS
' Définition des variables en dur dans le programmes
szAnneeMois="200804"
szFileName="REPR1"
' code produit par défaut pour les factures
lfk_Product="4"
dblTVA=19.6
'mode re règlement, par défaut VIR pour ne pas avoir à gérer les dépots de chèque
szModeReglt="VIR"
 
szFeuilleXLS="C:\Import\" & szFileName & "-" & szAnneeMois & ".xls"
' entete des factures : AF pour Anciennes Factures
szEnteteFact="AF" right(szAnneeMois,4) & "-"
'entete client si non existant : AC pour Ancien Client
szEnteteCli="AC" right(szAnneeMois,4) & "-"
szDateCre=left(szAnneeMois,4) & "/" & right(szAnneeMois,2) & "/01"
 
 
'connection à la base dolibarr
sServerName="localhost"
sDatabase="dlbdemo"
'sDatabase="dolibarr"
sUserName="root"
SPassword=""
 
l_base = "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=" & sServerName & "; PORT=3306;"
l_base = l_base & "DATABASE=" & sDatabase & "; USER=" & sUserName & "; OPTION=3; Stmt=;"
l_base = l_base & "PASSWORD=" & SPassword & ";" 
Set cnx = CreateObject("ADODB.Connection")
cnx.open l_base
 
' ouverture de la feuille Excel
Set objExcel = WScript.CreateObject("Excel.Application")
objExcel.Visible = true
objExcel.Workbooks.open(szFeuilleXLS)
 
NumLgn=2
' on boucle sur les lignes de la feuille Excel
do while true
  if len(objExcel.cells(NumLgn,1))=0 then
    exit do
  end if
 
  ' on récupère le numéro et on le complète avec des zéro
  numFact =objExcel.cells(NumLgn,1)
  nbCar=len(numFact)
  for i= nbCar to 4
    numFact= "0" & numFact
  next
 
  ' on vérifie si le tiers existe déjà
  szNomClient=ucase(replace(objExcel.cells(NumLgn, 2), "'", "''"))
  sql="select rowid from llx_societe where ucase(nom)='" & szNomClient & "'"
  Set rsTiers = CreateObject("ADODB.Recordset")
  rsTiers.CursorLocation = 3 ' adUseClient   2: useserver'
  rsTiers.Open sql, cnx, 3, 3
 
  if rsTiers.recordcount > 0 then
    lNumTiers=rsTiers.fields("rowid")
  else
    ' on récupère le numéro de facture comme numéro unique de clé
    sqlI="insert into llx_societe (nom, datec, tms, status, client, code_client) values ("
    sqlI=sqlI  & " '" & szNomClient & "' , '" & szDateCre &"', '" & szDateCre & "', 1, 1,"
    sqlI=sqlI  & "'" & szEnteteCli & numFact & "')"
    cnx.execute (sqlI)
    ' ensuite on récupère le numéro de tier crée
    rsTiers.close
    rsTiers.Open sql, cnx, 3, 3
    lNumTiers=rsTiers.fields("rowid")
  end if
  rsTiers.close
  set rsTiers=Nothing
 
  ' deuxieme étape, la création de la facture, on vérifie si elle n'existe pas déjà
  sql="select rowid from llx_facture where facnumber='" & szEnteteFact & numFact & "'"
  Set rsFact = CreateObject("ADODB.Recordset")
  rsFact.CursorLocation = 3 ' adUseClient   2: useserver'
  rsFact.Open sql, cnx, 3, 3
 
  if rsFact.recordcount > 0 then
    lNumFact=rsFact.fields("rowid")
  else
    MntFactHT=objExcel.cells(NumLgn,3)
    MntFactTTC=replace(MntFactHT*(1+(dblTVA/100)),",",".")
    MntHT=replace(MntFactHT*(dblTVA/100),",",".")
 
    sqlI="insert into llx_facture (facnumber, entity, type, fk_soc, datec, datef,"
    sqlI=sqlI & " paye, model_pdf, fk_mode_reglement, fk_statut, "
    sqlI=sqlI & "  fk_user_author, fk_user_valid, total, total_ttc, tva) values ("
    sqlI=sqlI & " '" & szEnteteFact & numFact & "',1, 0,"
    sqlI=sqlI & lNumTiers & ", '" & szDateCre & "', '" & szDateCre & "'" & ",1, 'crabe', 7, 2," 
    sqlI=sqlI & " 1, 1, " & MntFactHT & ", " & MntFactTTC & ", " & replace(dblTVA,",",".") & ")"
    cnx.execute (sqlI)
 
    'ensuite on récupère le numéro de la facture crée
    rsFact.close
    rsFact.Open sql, cnx, 3, 3
    lNumFact=rsFact.fields("rowid")
 
    ' création d'une ligne détail de la facture  
    sqlI="insert into llx_facturedet (fk_facture, fk_product, description,"
    sqlI=sqlI & " tva_tx, qty, price, total_ht, total_tva, total_ttc) values ("
    sqlI=sqlI & lNumFact & "," & lfk_Product & "," & "'Reprise" & szFileName & "' ,"
    sqlI=sqlI & replace(dblTVA, ",", ".") & ", 1, " & MntFactHT & "," & MntFactHT & "," 
    sqlI=sqlI & replace(MntHT , ",", ".") & "," & MntFactTTC & ")"
    cnx.execute (sqlI)
  end if
  rsFact.close
  set rsFact = nothing
 
  ' derniere étape, la création des lignes de reglement des factures
  for ColReglt = 4 to 13
    MntRegltHT=objExcel.cells(NumLgn,ColReglt)
    'si il y a eu un règlement de saisie
    if len(MntRegltHT) > 0 then
      ' on récupère la date du règlement en première ligne
      szDateReglt=objExcel.cells(1,ColReglt)
      szDateReglt = right(szDateReglt,4) & "/" & mid(szDateReglt,4,2) & "/" & left(szDateReglt,2)
      ' attention le montant est HT, il faut lui ajouter la TVA
      MntRegltTTC=replace(MntRegltHT*(1+(dblTVA/100)),",",".")
      ' on ajoute le règlement à llx_paiement llx_paiement_facture et llx_bank llx_bank_url
      sql="insert into llx_bank (datec, datev, dateo, amount, label, fk_account, "
      sql=sql & " fk_user_author, fk_type ) values (" 
      sql=sql & " '" & szDateReglt & "', '" & szDateReglt & "', '" & szDateReglt & "', "
      sql=sql & MntRegltTTC & ", '" & szNomClient & "',1 , 1, '" & szModeReglt & "')"
      cnx.execute (sql)
 
      ' ensuite on recupére l'id
      sql="select max(rowid) as MaxNumBank from llx_bank "
      Set rsBank = CreateObject("ADODB.Recordset")
      rsBank.CursorLocation = 3 ' adUseClient   2: useserver'
      rsBank.Open sql, cnx, 3, 3
      lNumBank=rsBank.fields("MaxNumBank")
      rsBank.close
      set rsBank=nothing
 
      sql="insert into llx_paiement (datec, tms, datep, amount, fk_paiement,"
      sql=sql & " fk_bank, fk_user_creat) values ("
      sql=sql & " '" & szDateReglt & "', '" & szDateReglt & "', '" 
      sql=sql & szDateReglt & "', " & MntRegltTTC & ", 2, 1, 1)"
      cnx.execute (sql)
 
      sql="select max(rowid) as MaxNumBank from llx_paiement "
      Set rsPaiement = CreateObject("ADODB.Recordset")
      rsPaiement.CursorLocation = 3 ' adUseClient   2: useserver'
      rsPaiement.Open sql, cnx, 3, 3
      lNumPaiement=rsPaiement.fields("MaxNumBank")
      rsPaiement.close
      set rsPaiement=nothing
 
      sql="insert into llx_paiement_facture( fk_paiement, fk_facture, amount) "
      sql= sql & " values (" & lNumPaiement & ", " & lNumFact & ", " & MntRegltTTC & ")"
      cnx.execute (sql)
    end if
  next
 
  NumLgn=NumLgn+1
loop
msgbox ("Fin du traitement")