예제 #1
0
파일: term.py 프로젝트: stdk/u2py
def refill(card,amount):
 cost,(begin,end) = available_refill(*card.contract())

 if purse.change_value(card,amount) < cost: return 0
 purse.change_value(card,-cost)

 events = []
 static_sector,static_data = read_static(card)
 dyn_sector,dyn_proxy,dyn_data = read_dynamic(card)

 if not static_data.active():
  sell_event = EVENT_CONTRACT(card, Value = cost)
  sell_event.LocalTransactions = dyn_data.update()
  events.append(sell_event)

 static_data.refill(begin,end)

 term_pack = ((end.year - 2000) << 8) + end.month
 refill_event = EVENT_CONTRACT_ADD2(card,TransactionValue=term_pack,Amount=cost)
 refill_event.LocalTransactions = dyn_data.update()
 events.append(refill_event)

 try:
  dyn_proxy.commit(dyn_data,low_endian = 1)
  dyn_sector.write()

  card.auth(static_sector)
  static_sector.data.crc16_calc(low_endian = 1)
  static_sector.write()
 except Exception as e: [event.set_error_code(e) for event in events]; raise
 finally: [event.save(card) for event in events]

 return cost