home *** CD-ROM | disk | FTP | other *** search
/ Freelog Special Freeware 31 / FreelogHS31.iso / ArgentCompta / Bankperfect / bp.exe / Scripts / Receipt / receipt.py < prev   
Text File  |  2005-10-25  |  7KB  |  193 lines

  1. import BP, time, cPickle
  2.  
  3. def DecToText(Value):
  4.   uni = ['un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf', 'dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize']
  5.   diz = ['vingt', 'trente', 'quarante', 'cinquante', 'soixante', '', 'quatre-vingt']
  6.   mil = ['cent', 'mille', 'million', 'milliard', 'billion', 'milliers-de-billions', 'trillion']
  7.   try:
  8.     N = long(Value)
  9.     if N < 0: return ""
  10.   except:
  11.     return ""
  12.  
  13.   if N == 0: return "ZΘro"
  14.   Result = ""
  15.   k = 0
  16.  
  17.   while N != 0:
  18.     U = N % 10
  19.     N = N / 10
  20.     D = N % 10
  21.     N = N / 10
  22.     if D in [1, 7, 9]:
  23.       D -= 1
  24.       U += 10
  25.     s = ''
  26.     if D > 1:
  27.       s = " %s" %diz[D - 2]
  28.       if (D < 8) and ((U == 1) or (U == 11)): s += " et"
  29.     if U > 16:
  30.       s += " %s" %uni[9]
  31.       U -= 10
  32.     if U > 0: s += " %s" %uni[U - 1]
  33.     if (Result == "") and (D == 8) and (U == 0): Result = "s"
  34.     Result = s + Result
  35.  
  36.     C, N = N % 10, N / 10
  37.     if C > 0:
  38.       s = ""
  39.       if C > 1: s = " %s%s" %(uni[C - 1], s)
  40.       s += " %s" %mil[0]
  41.       if (Result == '') and (C > 1): Result = "s"
  42.       Result = s + Result
  43.  
  44.     if N > 0:
  45.       k += 1
  46.       I = N % 1000
  47.       if (I > 1) and (k > 1): Result = "s%s" %Result
  48.       if I > 0: Result = " %s%s" %(mil[k], Result)
  49.       if (I == 1) and (k == 1): N -= 1
  50.  
  51.   return Result.replace("un milliers", "un millier").replace("llionss", "llions").strip()
  52.  
  53. def WebCurr(f):
  54.   s = str(f).replace(".", ",").replace("-", "")
  55.   i = s.find(",")
  56.   if i > -1:
  57.     ipart = int(s[:i])
  58.     fpart = int(s[i + 1:][:2])
  59.   else:
  60.     ipart = int(s)
  61.     fpart = 0
  62.   if fpart == 0: txt = "%s euros" %(DecToText(ipart))
  63.   else: txt = "%s euros et %s cents" %(DecToText(ipart), DecToText(fpart))
  64.   return "%d,%.2d\xA0Ç (%s)" %(ipart, fpart, txt)
  65.  
  66. def WebDate(dt):
  67.   m = ["janvier", "fΘvrier", "mars", "avril", "mai", "juin", "juillet", "ao√t", "septembre", "octobre", "novembre", "dΘcembre"]
  68.   j = int(dt[:2])
  69.   if j == 1: return "1er\xA0%s\xA0%s" %(m[int(dt[3:5]) - 1], dt[6:])
  70.   return "%d\xA0%s\xA0%s" %(j, m[int(dt[3:5]) - 1], dt[6:])
  71.  
  72. def save_file():
  73.   f = open(fpath, "w")
  74.   cPickle.dump(dic, f)
  75.   f.close()
  76.  
  77. def load_file():
  78.   try:
  79.     f = open(fpath, "r")
  80.     dic = cPickle.load(f)
  81.     f.close()
  82.     return dic
  83.   except:
  84.     return {}
  85.  
  86.  
  87.  
  88.  
  89. Somme_rb = 0
  90. Somme_pr = 0
  91. NbRbts = 0
  92. detail = []
  93. ppath = "%sScripts\\Receipt" %BP.BankPerfectExePath()
  94. fpath = "%s\\receipt.dat" %ppath
  95. dic = load_file()
  96.  
  97. acc = BP.AccountCurrent()
  98. for i in BP.VisibleLines():
  99.   mod = BP.OperationMode[acc][i]
  100.   val = BP.OperationAmount[acc][i]
  101.   thd = BP.Operationthirdparty[acc][i]
  102.   det = BP.OperationDetails[acc][i]
  103.   dte = BP.OperationDate[acc][i]
  104.   
  105.   if val > 0:
  106.     Somme_pr = Somme_pr + val
  107.   else:
  108.     NbRbts += 1
  109.     s = mod[0].upper()
  110.     if s in ['P', 'V']: s = 'virement'
  111.     elif s == 'R': s = 'versement en espΦces'
  112.     else:
  113.       if mod.find("Chq ") == 0: s = 'chΦque n░ %s' %mod[5:]
  114.       else: s = 'chΦque'
  115.     detail.append("TextRect 250;0;1900;- Un %s d'un montant de %s le %s" %(s, WebCurr(val), WebDate(dte)))
  116.     Somme_rb = Somme_rb - val
  117.  
  118. detail = "\n".join(detail)
  119. f = CreateComponent("TForm", None)
  120. f.SetProps(Position="poScreenCenter", Caption="CrΘation d'un reτu", Width=500, Height=330, BorderStyle="bsSingle", BorderIcons=["biSystemMenu","biMinimize"])
  121. f.Font.Name = "Tahoma"
  122.  
  123. CreateComponent("TLabel", f).SetProps(Parent=f, Left=30, Top=30, Caption="Nom du payeur :")
  124. EPayer = CreateComponent("TEdit", f)
  125. EPayer.SetProps(Parent=f, Left=220, Top=25, Width=240, Text=dic.get("payer", ""))
  126.  
  127. CreateComponent("TLabel", f).SetProps(Parent=f, Left=30, Top=60, Caption="Ville o∙ va Ωtre signΘ le reτu :")
  128. ECity = CreateComponent("TEdit", f)
  129. ECity.SetProps(Parent=f, Left=220, Top=55, Width=240, Text=dic.get("city", ""))
  130.  
  131. LT = CreateComponent("TLabel", f)
  132. LT.SetProps(Parent=f, Left=30, Top=100, Caption="BΘnΘficiaire :")
  133. LT.Font.Style = ["fsBold"]
  134.  
  135. CreateComponent("TLabel", f).SetProps(Parent=f, Left=50, Top=130, Caption="Nom :")
  136. EPayee = CreateComponent("TEdit", f)
  137. EPayee.SetProps(Parent=f, Left=220, Top=125, Width=240, Text=dic.get("payee", ""))
  138.  
  139. CreateComponent("TLabel", f).SetProps(Parent=f, Left=50, Top=160, Caption="Adresse complΦte :")
  140. EAdr = CreateComponent("TEdit", f)
  141. EAdr.SetProps(Parent=f, Left=220, Top=155, Width=240, Text=dic.get("address", ""))
  142.  
  143. CreateComponent("TLabel", f).SetProps(Parent=f, Left=50, Top=190, Caption="Sexe :")
  144. CBSex = CreateComponent("TComboBox", f)
  145. CBSex.SetProps(Parent=f, Left=220, Top=185, Width=240, Style="csDropDownList")
  146. CBSex.Items.Text = "Masculin\nFΘminin"
  147. CBSex.ItemIndex = Text=dic.get("sex", 0)
  148.  
  149. CreateComponent("TButton", f).SetProps(Parent=f, Left=155, Top=240, Width=90, Height=25, Caption="OK", Default=1, ModalResult=1)
  150. CreateComponent("TButton", f).SetProps(Parent=f, Left=255, Top=240, Width=90, Height=25, Caption="Annuler", Cancel=1, ModalResult=2)
  151. f.ShowModal()
  152.  
  153. dic = {"payer": EPayer.Text, "payee": EPayee.Text, "city": ECity.Text, "address": EAdr.Text, "sex": CBSex.ItemIndex}
  154. save_file()
  155. payeur = EPayer.Text
  156. beneficiaire = EPayee.Text
  157. ville = ECity.Text
  158. adresse = EAdr.Text
  159. if CBSex.ItemIndex == 1: mf = "e"
  160. else: mf = ""
  161.  
  162. footer = 'La somme totale α payer Θtant Θgale α %s, ' %WebCurr(Somme_pr)
  163. if Somme_rb >= Somme_pr: footer += 'elle a ΘtΘ intΘgralement remboursΘe. A ce jour, %s ne me doit plus rien.' %payeur
  164. else: footer += '%s doit encore me rembourser %s.' %(payeur, WebCurr(Somme_pr - Somme_rb))
  165.  
  166. now = time.localtime()
  167. now = "%.2d-%.2d-%.4d" %(now[2], now[1], now[0])
  168. path = "%s\\recu.pdf" %ppath
  169. params = {"footer": footer, "bg": 0x00EEEEEE, "path": path.replace("\\", "\\\\"), "payeur": payeur, "sexe": mf, "beneficiaire": beneficiaire, "adresse": adresse, "total": WebCurr(Somme_rb), "NbRbts": NbRbts, "detail": detail, "footer": footer, "ville": ville, "now": WebDate(now)}
  170.  
  171. code = """Create Reτu;%(path)s;2100;2970
  172. PenColor 0
  173. FillRect 200;200;1900;320;%(bg)d
  174. DrawRectangle 200;200;1900;320
  175. FontName TimesBold
  176. FontSize 90
  177. TextOut 1000;290;Reτu
  178. FontName Helvetica
  179. FontSize 40
  180. CurrY 500
  181. TextRect 200;0;1900;Je soussignΘ%(sexe)s, %(beneficiaire)s, demeurant %(adresse)s, reconnais avoir reτu de %(payeur)s la somme de %(total)s sous la forme de %(NbRbts)d versements selon les modalitΘs suivantes :
  182. FontSize 30
  183. TextOut 200;0;
  184. %(detail)s
  185. FontSize 40
  186. TextOut 200;0;
  187. TextRect 200;0;1900;%(footer)s
  188. TextOut 200;-50;Le prΘsent reτu a ΘtΘ Θtabli en double exemplaire, dont un m'a ΘtΘ remis.
  189. TextOut 200;0;Fait α %(ville)s, le %(now)s.""" %params
  190.  
  191. if f.ModalResult == 1:
  192.   BP.GetURL("pdf:%s" %code)
  193.   BP.ShellExecute("open", path, "", 1)