示例#1
0
    def get(self, **kwargs):
        self.request.charset = 'utf-8'

        account = kwargs['account']

        # Nos fijamos la ultima vez que lo pedimos, pedimos hasta hoy si estamos dentro de un mes max
        # Sino bajaremos en dos dias (probabilidad muy baja)
        upcfg = UPConfig.get_or_insert('main-config',
                                       last_ipn=datetime.now().date(),
                                       last_ipn_emi=datetime.now().date())

        _from = upcfg.last_ipn
        if account == 'emi':
            _from = upcfg.last_ipn_emi

        _to = datetime.utcnow().date()

        if (_to - _from).days > 28:
            _to = _from + timedelta(days=28)

        # _to = date(2011,10,22)
        # _from = date(2011,9,24)

        # Bajamos el xml con la api de IPN
        _xml = ipn_download(account, _from, _to)
        dom = minidom.parseString(_xml)

        # self.response.write(_xml)
        # self.response.write(dom)
        # return

        # Verificamos que este todo bien el xml de vuelta
        state = int(get_xml_value(dom, 'State'))
        if state != 1:
            logging.error('Error al traer xml: %d [%s]' % (state, account))
            self.response.write('error')
            return

        #logging.error('----------traje joya')

        # Parseamos y generamos los Payment
        to_save = []
        for pay in dom.getElementsByTagName('Pay'):

            p = Payment()
            p.trx_id = str(pay.attributes['Trx_id'].value)

            # Rompemos la fecha (la esperamos en formato YYYYMMDD)
            tmp = get_xml_value(pay, 'Trx_Date')
            date_arr = tmp.split(' ')[0].split('-')
            p.date = date(int(date_arr[0]), int(date_arr[1]), int(date_arr[2]))

            # El monto lo ponemos en int por 10
            p.amount = int(float(get_xml_value(pay, 'Trx_Payment')) * 10)
            p.tag_data = account
            p.assinged = 0

            to_save.append(p)

        # Cuantos pagos recibimos?
        logging.info('Se recibieron %d pagos [%s]' % (len(to_save), account))

        # Salvamos todos los payments juntos y la ultima vez que corrimos en una transaccion
        # def txn():
        # if(len(to_save)):
        # db.put(to_save)

        # tmp = PaymentAssingMapper()
        # deferred.defer(tmp.run, _transactional=True)

        # taskqueue.add(url='/tsk/update_ipn/%s' % account, params={'date': _to.strftime('%Y%m%d'), 'account':account}, transactional=True)

        # db.run_in_transaction(txn)

        if (len(to_save)):
            db.put(to_save)

            tmp = PaymentAssingMapper()
            deferred.defer(tmp.run)

        taskqueue.add(url='/tsk/update_ipn/%s' % account,
                      params={
                          'date': _to.strftime('%Y%m%d'),
                          'account': account
                      })

        # Mandamos a correr la tarea de mapeo de pagos si bajamos alguno nuevo
        self.response.write('ok - end')