home *** CD-ROM | disk | FTP | other *** search
/ Freelog Special Freeware 31 / FreelogHS31.iso / ArgentCompta / Bankperfect / bp.exe / Scripts / Scheduler / scheduler_add.py < prev    next >
Text File  |  2005-07-15  |  3KB  |  110 lines

  1. #Version 1.1
  2.  
  3. import BP, cPickle, time
  4.  
  5. data_path = "%sScripts\\Scheduler\\scheduler.dat" %BP.BankPerfectExePath()
  6. modes = ["Carte", "Retrait DAB", "ChΦque Θmis", "PrΘlΦvement", "Virement Θmis", "TIP", "Versement", "DΘp⌠t de chΦque", "Virement reτu"]
  7.  
  8. def days_of_month(y, m):
  9.   is_leap_year = (y % 4 == 0) and (y % 100 != 0 or y % 400 == 0)
  10.   days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  11.   if m == 2 and is_leap_year: return 29
  12.   else: return days[m - 1]
  13.  
  14. def add_years(date, delta):
  15.   y, m, d = date
  16.   return y + delta, m, d
  17.  
  18. def add_days(date, delta):
  19.   stamp = date2stamp(date)
  20.   return stamp2date(stamp + 86400 * delta)
  21.  
  22. def add_months(date, delta):
  23.   y, m, d = date
  24.   is_last_day = days_of_month(y, m) == d
  25.   m += delta
  26.   if delta > 0:
  27.     while m > 12: y += 1; m -= 12
  28.   elif delta < 0:
  29.     while m < 1: y -= 1; m += 12;
  30.  
  31.   last_day = days_of_month(y, m)
  32.   if is_last_day or d > last_day: return y, m, last_day
  33.   else: return y, m, d
  34.  
  35. def is_last_day_of_month(date):
  36.   y, m, d = date
  37.   days = days_of_month(y, m)
  38.   return d == days
  39.  
  40. def date2stamp(date):
  41.   return time.mktime(date + (3, 0, 0, 0, 0, 0))
  42.  
  43. def stamp2date(stamp):
  44.   return time.gmtime(stamp)[:3]
  45.  
  46. def add_to_date(date, delta, unit):
  47.   if unit == 0: #jours
  48.     return add_days(date, delta)
  49.   elif unit == 1: #mois
  50.     return add_months(date, delta)
  51.   else: #annΘes
  52.     return add_years(date, delta)
  53.  
  54. def str_to_date(date):
  55.   l = date.replace("/", "-").split("-")
  56.   return int(l[2]), int(l[1]), int(l[0])
  57.  
  58. def save_file():
  59.   global data_path
  60.   f = open(data_path, "wb")
  61.   cPickle.dump(files, f, 1)
  62.   f.close()
  63.  
  64. def extract_file_name(path):
  65.   while path.find("\\") > -1:
  66.     path = path[path.find("\\") + 1:]
  67.   return path
  68. #_______________________________________________________________________________
  69. try:
  70.   f = open(data_path, "rb")
  71.   files = cPickle.load(f)
  72.   f.close()
  73. except:
  74.   files = {}
  75.  
  76. filename = extract_file_name(BP.BankPerfectFileName())
  77.  
  78. if files.has_key(filename): records = files[filename]
  79. else:
  80.   records = []
  81.   files[filename] = records
  82.  
  83. account_index = BP.AccountCurrent()
  84. line_index = BP.LineSelect(-1)
  85.  
  86. record = {}
  87.  
  88. date = str_to_date(BP.OperationDate[account_index][line_index])
  89. record["nextdate"]   = add_to_date(date, 1, 1)
  90. record["tiers"]      = BP.Operationthirdparty[account_index][line_index]
  91. record["details"]    = BP.OperationDetails[account_index][line_index]
  92. record["categ"]      = BP.OperationCateg[account_index][line_index]
  93. record["montant"]    = BP.OperationAmount[account_index][line_index]
  94. record["autoinsert"] = 1
  95. record["account"]    = account_index
  96. record["delta"]      = 1
  97. record["deltaunit"]  = 1
  98. record["enddate"]    = (0, 0, 0)
  99.  
  100. m = BP.OperationMode[account_index][line_index]
  101. try:
  102.   record["mode"] = modes.index(m)
  103. except:
  104.   if record["montant"] > 0: record["mode"] = 8
  105.   else: record["mode"] = 3
  106.  
  107. records.append(record)
  108. save_file()
  109. BP.MsgBox("L'opΘration a ΘtΘ ajoutΘe α l'ΘchΘancier.", 0)
  110.