示例#1
0
文件: root.py 项目: nomed/ebetl
 def show(self, id):
     """GET /stocks/id: Show a specific item"""
     result = views.get_pricelist(id)
     
     ret = DBSession.query(Provenienze).filter(Provenienze.numeroprovenienza==id).one()
        
     return dict(page='stock', ret = ret, result=result)            
示例#2
0
文件: filconad.py 项目: nomed/ebetl
    def write_out(self, inputb2b_id=None, *args, **kw):
        """
        Process files from db and process docs and recs
        """
        # get prov obj
        prov = (
            DBSession.query(Provenienze)
            .filter(Provenienze.codiceprovenienza == self.prov, Provenienze.tipoprovenienza == "FOR")
            .one()
        )
        # get files to process
        if not inputb2b_id:
            files = (
                DBSession.query(Inputb2b)
                .filter(and_(Inputb2b.supplier_id == prov.numeroprovenienza, Inputb2b.processed == 0))
                .order_by(Inputb2b.acquired)
                .all()
            )
        else:
            files = (
                DBSession.query(Inputb2b)
                .filter(and_(Inputb2b.supplier_id == prov.numeroprovenienza, Inputb2b.b2b_id == inputb2b_id))
                .order_by(Inputb2b.acquired)
                .all()
            )

        log.info("input_b2b: found %s to process" % (len(files)))
        pricelist_tmp = None
        pricelist = None
        for fobj in files:

            # get current pricelist linked to supplier
            if not pricelist_tmp:
                pricelist_tmp = get_pricelist(prov.numeroprovenienza)
            # create a dict indexed by supplier_code
            if not pricelist:
                pricelist = get_pricelist_todict(pricelist_tmp, prov)

            results = self.get_data(pricelist, fobj.b2b_id, fobj.content.splitlines())
            log.debug("")
            log.info("input_b2b: id %s with %s results" % (fobj.b2b_id, len(results)))

            row = 1
            for res in results:
                factb2b_dict = {}
                factb2b_dict["supplier_id"] = prov.numeroprovenienza

                for key, val in self.jsonmap.iteritems():
                    src, func = val
                    if res.has_key(src):
                        newval = getattr(mapper, func)(res[src])
                        factb2b_dict[key] = newval
                        # log.debug("fact_b2b: %s | %s | %s | %s => %s"%(
                        #            src, func, key, res[src], [unicode(newval).encode('utf-8')]
                        # ))
                    else:
                        # log.debug("%s"%(pprint(pricelist)))
                        log.debug("not found: %s [%s]" % (src, key))
                # log.debug(res)
                # sys.exit()

                # probably skip if doc exists
                factb2b_dict["row"] = row
                and_c = and_(
                    Factb2b.supplier_id == factb2b_dict["supplier_id"],
                    Factb2b.inputb2b_id == factb2b_dict["inputb2b_id"],
                    Factb2b.header == factb2b_dict["header"],
                    Factb2b.doc_num == factb2b_dict["doc_num"],
                    Factb2b.rec_num == factb2b_dict["rec_num"],
                    Factb2b.b2b_sale_type == factb2b_dict["b2b_sale_type"],
                    Factb2b.b2b_code == factb2b_dict["b2b_code"],
                    Factb2b.row == factb2b_dict["row"],
                )

                try:

                    fobjrow = DBSession.query(Factb2b).filter(*and_c).one()
                    log.debug("fact_b2b: found row id %s" % (fobjrow.b2b_id))

                except:
                    # raise
                    # fobjrows = DBSession.query(Factb2b).filter(*and_c).all()
                    # for fobj in fobjrows:
                    #    log.debug("Error on b2b_code: %s rec_num %s sale_type %s"%(
                    #                fobj.b2b_code, fobj.rec_num, fobj.b2b_sale_type) )
                    # raise
                    fobjrow = Factb2b()
                    log.debug("fact_b2b: row NOT found")
                    # from pprint import pprint
                    # log.debug(pprint(factb2b_dict))
                    # sys.exit()

                setattr(fobjrow, "account_code", self.config.get("%s.notfound" % (self.record)))

                for key, val in factb2b_dict.iteritems():
                    if key in self.rosetta.keys():
                        val = self.rosetta[key][val]
                    setattr(fobjrow, key, val)

                DBSession.add(fobjrow)

                # print fobjrow,fobjrow.doc_num
                DBSession.flush()
                log.debug("fact_b2b: processed doc #%s - ref #%s" % (fobjrow.doc_num, fobjrow.rec_num))
                row += 1
            fobj.processed = 1
            DBSession.add(fobj)
            DBSession.flush()
        transaction.commit()