166 lines
5 KiB
Python
166 lines
5 KiB
Python
# -*- 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, web_user_name)
|
|
|
|
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)
|