# -*- coding: utf-8 -*- from pyjeeves.models.raw import Order as OrderModel, OrderItem as OrderItemModel from pyjeeves.models import db from sqlalchemy.sql.expression import and_ from sqlalchemy.orm.exc import NoResultFound from pyjeeves import logging logger = logging.getLogger("PyJeeves." + __name__) # Relocate Jeeves modules to separate folder and let a "master" module handle imports, and setup. class Order(): """Handles orders in Jeeves""" @staticmethod def get(order_no): """ Query an order by number """ try: return db.raw.query(OrderModel).filter_by( OrderNr=order_no ).one() except NoResultFound: raise KeyError @staticmethod def get_all_unregistered_order(): order = OrderModel.query.filter(and_(OrderModel.OrderStatusCode == 00)).all() return order @staticmethod def get_list(order_no=[]): return db.raw.query(OrderModel).filter( OrderModel.OrderNr.in_(order_no) ).all() @staticmethod def get_all_by_company(ftg_nr=None): if not ftg_nr: raise KeyError return db.raw.query(OrderModel).filter( OrderModel.FtgNr == str(ftg_nr) ).all() @staticmethod def create(customer_no, head={}, items=[], web_user_name=None, pers_sign='biz'): head['CompanyNumber'] = str(customer_no) head['PersSign'] = str(pers_sign) # Create order from head dict to get an order number order, invoice_possible = OrderModel(head).create(web_user_name) if not order['OrderNr']: raise # Go through order items, if any, and save them to DB. order['OrderItems'] = Order.create_rows(order, items) # Save the information in the order object # Boolean argument deceides if order has contact person, and should be set 'registered' order.save(invoice_possible, web_user_name) return order @staticmethod def create_rows(order, items=[], pers_sign='biz'): rv = [] for item in items: if not isinstance(item, OrderItemModel): item = OrderItemModel(item) # Set RequestedDeliveryDate from order head if not specified for items. if order['OrdBerLevDat'] and not item['OrdBegLevDat']: item['OrdBegLevDat'] = order['OrdBerLevDat'] item['OrderNr'] = order['OrderNr'] item['FtgNr'] = order['FtgNr'] item['PersSign'] = pers_sign rv.append(item.save()) return rv if __name__ == '__main__': logger.info("Starting TEST") logger.info("Testing getting an order") logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) # import os # os.environ['TDSDUMP'] = 'stdout' # Jeeves_Esales_CreateOrder # All "Jeeves_Esales_" procedures may perhaps be used? # select * # from LKTest.information_schema.routines # where routine_type = 'PROCEDURE' # AND SPECIFIC_NAME LIKE '%Jeeves_Esales_%'; # data = { # 'OrderNr': 500500, # 'OrdDatum': datetime.now(), # 'OrdTyp': 1, # 'FtgNr': customer_no, # 'OrdBerLevDat': datetime(2019, 7, 10), # 'ValKod': 'SEK', # 'OrderItems': [ # {'ArtNr': '2005', # 'OrdAntal': 5.4} # ], # 'Saljare': '500', # 'PersSign': 'marlin', # 'MomsKod': 2, # 'BetKod': '10', # 'LevVillkKod': 3, # 'LevSattKod': 2, # 'LagStalle': 0, # 'ForetagKod': 1 # } order_head = { 'AddrCO': '', 'AddrCity': 'Uppsala', 'AddrCountry': 'SE', 'AddrName': 'Lindvalls Kaffe', 'AddrPostalCode': '751 82', 'AddrStreet': 'Kungsgatan 60', 'CompanyName': 'Lindvalls Kaffe AB (övrigt)', 'CompanyNumber': '179580', 'CustomerContact': 'Test beställning', 'CustomerReference': 'no po number', 'InternalInfo': 'Test order', 'OrderNumber': 419040, 'OrderStatusCode': 13, 'ShippingEmail': 'order@lindvallskaffe.se', 'ShippingInfo': 'Lev till godsmottagning', 'ShippingPhone': '018-480 20 00', 'ShippingSMS': '0703 25 25 02', 'ShippingTypeCode': 4} order_items = [ {'AltEnhetKod': 'Bricka5,4', 'ArticleName': 'Lindvalls Mellanrost', 'ArticleNumber': '2003', 'OrdAntalAltEnh': '1.00', 'OrderRowNumber': 10, 'UnitAmount': '5.40', 'UnitPrice': '92.00'}, {'AltEnhetKod': 'Bricka5,4', 'ArticleName': 'Lindvalls Mellanrost', 'ArticleNumber': '2003', 'OrdAntalAltEnh': 1.666666667, 'OrderRowNumber': 20, 'UnitAmount': '9.00', 'UnitPrice': '92.00'}, {'AltEnhetKod': 'Bricka5,4', 'ArticleName': 'Lindvalls Mellanrost', 'ArticleNumber': '2003', 'OrdAntalAltEnh': '5.00', 'OrderRowNumber': 30, 'UnitAmount': '27.00', 'UnitPrice': '92.00'}] # print(Order.get_list(['406569', '179580', '2440070', '179584'])) from pprint import pprint # pprint(Order.get(7000028).to_dict()) pprint(Order.create('179584', order_head, order_items).to_dict()) # pprint(Order.get('419033').to_dict()) # c1 = CompanyModel.query.filter_by(FtgNr="406569").first() # print(c1) # logger.info(c1.json)