Ejemplo n.º 1
0
def process(content, ip_to_prod):
    for line in content: 
        if not line:
            continue
        act = ActionLog.deserialize(json.loads(line))
        if act.method == 'POST' and act.url.endswith('pedido'):
            inv = Invoice.deserialize(json.loads(act.body))
            for x in inv.items:
                ip_to_prod[act.ip_address].add(x.prod.codigo.upper())
Ejemplo n.º 2
0
    def test_inv(self):
        with self.sessionmanager:
            init_prod_cant = self.prod_api.get_producto('1', bodega_id=1).cantidad

            client = Client()
            client.codigo = '123'

            t = InvMetadata(
                client=client,
                codigo='123',
                user='******',
                total=123,
                subtotal=123,
                tax=123,
                discount=0,
                bodega_id=1,
                almacen_id=1
            )
            inv = Invoice()
            inv.meta = t
            inv.items = [
                Item(self.prod_api.get_producto('1'), 5)
            ]
            invoice = self.inv_api.save(inv)
            self.assertEquals(self.inv_api.get_doc(invoice.meta.uid).meta.codigo, '123')

            x = self.inv_api.commit(invoice)
            self.assertEquals(Status.COMITTED, x.meta.status)
            new_inv = self.prod_api.get_producto('1', bodega_id=1).cantidad
            self.assertEquals(-5, new_inv - init_prod_cant)

            x = self.inv_api.delete(invoice)
            self.assertEquals(Status.DELETED, x.meta.status)
            new_inv = self.prod_api.get_producto('1', bodega_id=1).cantidad
            self.assertEquals(0, new_inv - init_prod_cant)

            today = datetime.datetime.now()
            yesterday = today - datetime.timedelta(days=1)
            searched = list(self.inv_api.search_metadata_by_date_range(start=yesterday, end=today))
            print searched
            self.assertEquals(1, len(searched))
Ejemplo n.º 3
0
    def test_inv(self):
        with self.sessionmanager:
            init_prod_cant = self.prod_api.get_producto('1',
                                                        bodega_id=1).cantidad

            client = Client()
            client.codigo = '123'

            t = InvMetadata(client=client,
                            codigo='123',
                            user='******',
                            total=123,
                            subtotal=123,
                            tax=123,
                            discount=0,
                            bodega_id=1,
                            almacen_id=1)
            inv = Invoice()
            inv.meta = t
            inv.items = [Item(self.prod_api.get_producto('1'), 5)]
            invoice = self.inv_api.save(inv)
            self.assertEquals(
                self.inv_api.get_doc(invoice.meta.uid).meta.codigo, '123')

            x = self.inv_api.commit(invoice)
            self.assertEquals(Status.COMITTED, x.meta.status)
            new_inv = self.prod_api.get_producto('1', bodega_id=1).cantidad
            self.assertEquals(-5, new_inv - init_prod_cant)

            x = self.inv_api.delete(invoice)
            self.assertEquals(Status.DELETED, x.meta.status)
            new_inv = self.prod_api.get_producto('1', bodega_id=1).cantidad
            self.assertEquals(0, new_inv - init_prod_cant)

            today = datetime.datetime.now()
            yesterday = today - datetime.timedelta(days=1)
            searched = list(
                self.inv_api.search_metadata_by_date_range(start=yesterday,
                                                           end=today))
            print searched
            self.assertEquals(1, len(searched))
Ejemplo n.º 4
0
def main():
    with sessionmanager as session:

        all_client = get_all_client()
        meta_item = defaultdict(list)
        bodega_id = 1
        tax_percent = 12
        for meta, item, prod in query_all_fully_joined(session,
                                                       date(2015, 6, 1),
                                                       date(2015, 6,
                                                            30), bodega_id):
            meta_item[meta].append((item, prod))
        for m, i in meta_item.items():
            almacen_id = bodega_id
            codigo = m.codigo
            if codigo < 0:
                codigo = abs(codigo)
                almacen_id = 3

            store = prodapi.store.get(almacen_id)
            meta = InvMetadata(
                almacen_id=almacen_id,
                almacen_name=store.nombre,
                almacen_ruc=store.ruc,
                codigo=str(codigo),
                user=m.vendedor_id,
                client=all_client[m.cliente_id],
                timestamp=datetime.combine(m.fecha, time()),
                payment_format=newpayformat(m.pago),
                total=money_to_cent(m.total),
                tax_percent=tax_percent,
            )
            meta.status = Status.DELETED if m.eliminado else Status.COMITTED
            meta.subtotal = int(meta.total / (1 + tax_percent / 100.0))
            meta.tax = meta.total - meta.subtotal

            def make_item(ix):
                p = Product().merge_from(ix[1])
                p.precio1 = money_to_cent(ix[0].precio)
                return Item(p, ix[0].cantidad)

            items = map(make_item, i)

            inv = Invoice(meta, items)
            invapi.save(inv)
    print len(meta_item)
    print 'end'
Ejemplo n.º 5
0
def main():
    root = 'http://45.55.88.99:99/'
    auth = ('test', 'han')
    processor = ForwardRequestProcessor(dbapi, root, auth, codename='test')

    start = datetime.datetime(2015, 12, 1)
    end = datetime.datetime(2016, 1, 1)
    with dbapi.session:
        for meta in invapi.search_metadata_by_date_range(start, end, status=Status.COMITTED):
            r = requests.get('http://192.168.0.23/api/nota/{}'.format(meta.uid), auth=('yu', 'yu'))
            if r.status_code != 200:
                print r.status_code
                continue
            inv = Invoice.deserialize(r.json())
            work = doc_to_workobject(inv, action=WorkObject.CREATE, objtype=WorkObject.INV)
            processor.exec_work(work)
            print inv.meta.uid,  'created'
            work2 = doc_to_workobject(inv, action=WorkObject.CREATE, objtype=WorkObject.INV_TRANS)
            processor.exec_work(work2)
            print inv.meta.uid,  'commited'
Ejemplo n.º 6
0
def old_to_new_invoice(old_inv, all_client):
    meta_item = defaultdict(list)
    for meta, item, prod in old_inv:
        meta_item[meta.id].append((meta, item, prod))

    print 'total record', len(meta_item)
    for m, i in meta_item.items():
        m = i[0][0]
        almacen_id = m.bodega_id
        codigo = m.codigo
        if codigo < 0:
            codigo = abs(codigo)
            almacen_id = 3

        tax_percent = 12 if almacen_id != 2 else 0

        store = prodapi.store.get(almacen_id)
        meta = InvMetadata(
            almacen_id=almacen_id,
            almacen_name=store.nombre,
            almacen_ruc=store.ruc,
            codigo=str(codigo),
            user=m.vendedor_id,
            client=all_client[m.cliente_id],
            timestamp=datetime.combine(m.fecha, time(1, 0, 0)),
            payment_format=newpayformat(m.pago),
            total=money_to_cent(m.total),
            tax_percent=tax_percent,
        )
        meta.status = Status.DELETED if m.eliminado else Status.COMITTED
        meta.subtotal = int(meta.total / (1 + tax_percent / 100.0))
        meta.tax = meta.total - meta.subtotal

        def make_item(ix):
            p = Product().merge_from(ix[2])
            p.precio1 = money_to_cent(ix[1].precio)
            return Item(p, ix[1].cantidad)

        items = map(make_item, i)
        inv = Invoice(meta, items)
        yield inv
Ejemplo n.º 7
0
def make_one_inv(day, codigo, items):
    invmeta = InvMetadata()
    invmeta.codigo = codigo
    invmeta.timestamp = day
    invmeta.status = Status.NEW
    invmeta.bodega_id = 1
    invmeta.almacen_ruc = '0992584092001'
    invmeta.almacen_id = 3
    invmeta.payment_format = 'EFECTIVO'
    invmeta.subtotal = sum((int(i.cant * i.prod.precio1) for i in items))
    invmeta.tax = int(invmeta.subtotal * 0.12)
    invmeta.tax_percent = int(invmeta.subtotal * 0.12)
    invmeta.total = invmeta.subtotal + invmeta.tax
    invmeta.discount = 0

    invmeta.client = Client()
    invmeta.client.name = 'QUINAL SA'
    invmeta.client.codigo = '0992337168001'

    inv = Invoice(invmeta, items)
    return inv
Ejemplo n.º 8
0
 def forward_request(self, work):
     print 'work', work['work'], type(work['work'])
     work = work['work']
     work = WorkObject.deserialize(json.loads(work))
     if work.objtype == WorkObject.INV:
         if work.action == WorkObject.DELETE:
             work.content = InvMovementMeta(uid=work.objid)
         else:
             work.content = InvMetadata.deserialize(work.content)
     elif work.objtype == WorkObject.INV_TRANS:
         work.content = Invoice.deserialize(work.content)
     elif work.objtype == WorkObject.TRANS:
         work.content = Transferencia.deserialize(work.content)
     else:
         print 'ERROR'
         return -1 # RETRY
     r = self.exec_work(work)
     if r.status_code == 200:
         return -2  # OK
     else:
         return -1  # RETRY
Ejemplo n.º 9
0
def do_work():
    context = zmq.Context()
    receiver = context.socket(zmq.SUB)
    receiver.connect('tcp://localhost:{}'.format(ZEROMQ_PORT))
    receiver.setsockopt(zmq.SUBSCRIBE, '')
    externalapi = ExternalApi('http://45.55.88.99:99/api/', 'nota', 'yu', 'yu')
    print 'worker ready'

    while True:
        s = receiver.recv_pyobj()
        if s.command == Command.SAVE:
            with open(s.path) as f:
                data = json_loads(f.read())
                options = InvoiceOptions()
                options.incrementar_codigo = False
                options.revisar_producto = False
                options.crear_cliente = True
                data['options'] = options
                del data.timestamp
                serialized = json_dumps(data.serialize())
                codigo = externalapi.save(serialized).json()['codigo']
                with sessionmanager as session:
                    session.query(NPedidoTemporal).filter_by(id=s.uid).update({
                        NPedidoTemporal.status:
                        'uploaded',
                        NPedidoTemporal.external_id:
                        codigo
                    })
                    session.flush()
        elif s.command == Command.COMMIT:
            t = Invoice(InvMetadata, [])
            with sessionmanager as session:
                temp = session.query(NPedidoTemporal).filter_by(
                    id=s.uid).first()
                if temp.external_id is not None:
                    t.meta.uid = temp.external_id
                    externalapi.commit(t)
Ejemplo n.º 10
0
def get_sources(directory):
    for fname in os.listdir(directory):
        if fname.startswith('sale-2015') or fname.startswith('sale-2016'):
            with open(os.path.join(directory, fname)) as f:
                for x in f.xreadlines():
                    yield Invoice.deserialize(json.loads(x))
Ejemplo n.º 11
0
 def decode(line):
     j = json_loads(line)
     return Invoice.deserialize(j)
Ejemplo n.º 12
0
def get_saved_inv():
    for x in os.listdir(JSON_DIR):
        with open(os.path.join(JSON_DIR, x)) as f:
            yield Invoice.deserialize(json.loads(f.read()))
Ejemplo n.º 13
0
 def decode(line):
     j = json_loads(line)
     return Invoice.deserialize(j)
Ejemplo n.º 14
0
def get_saved_inv():
    for x in os.listdir(JSON_DIR):
        with open(os.path.join(JSON_DIR, x)) as f:
            yield Invoice.deserialize(json.loads(f.read()))