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)
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()