Stored procedure helpers. Order repo and model. More SQLService updates.
* A generic stored procedure helper added, and support for calling them. * Order and OrderItem tables added, including helpers and calls to SP for creation and updates. * Minor updates to other repositories.
This commit is contained in:
parent
b77a7069ce
commit
0af38e286e
9 changed files with 730 additions and 138 deletions
166
pyjeeves/repositories/order.py
Normal file
166
pyjeeves/repositories/order.py
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
# -*- 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):
|
||||
head['CompanyNumber'] = str(customer_no)
|
||||
|
||||
# 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['FtgNr'], order['OrderNr'], 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)
|
||||
|
||||
return order
|
||||
|
||||
@staticmethod
|
||||
def create_rows(company_no, order_no, items=[]):
|
||||
rv = []
|
||||
|
||||
for item in items:
|
||||
if not isinstance(item, OrderItemModel):
|
||||
item = OrderItemModel(item)
|
||||
item['OrderNr'] = order_no
|
||||
item['FtgNr'] = company_no
|
||||
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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue