from datetime import datetime from sqlalchemy.orm import sessionmaker from db.helpers import get_engine from db.models import Order, OrderStatus, OrderProductsSold # , ProductsSold from service.helper import parse_date, get_paged_data class OrderService: session = None access_token = None limiter = None def __init__(self, access_token, limiter): self.access_token = access_token Session = sessionmaker(bind=get_engine()) self.session = Session() self.limiter = limiter def save_all_orders(self): params = { 'access_token': self.access_token } json_orders = get_paged_data('orders', 'Orders', self.limiter, max_pages=None, params=params) self.save_orders(json_orders) def parse_order(self, json_order): return Order( id=int(json_order['id']), status=json_order['status'], date=parse_date(json_order['date']), customer_id=int(json_order['customer_id']), partial_total=float(json_order['partial_total']), taxes=float(json_order['taxes']), discount=float(json_order['discount']), point_sale=json_order['point_sale'], shipment=json_order['shipment'], shipment_value=float(json_order['shipment_value']), shipment_date=parse_date(json_order['shipment_date']), store_note=json_order['store_note'], discount_coupon=json_order['discount_coupon'], payment_method_rate=float(json_order['payment_method_rate']), value_1=float(json_order['value_1']), payment_form=json_order['payment_form'], sending_code=json_order['sending_code'], session_id=json_order['session_id'], total=float(json_order['total']), payment_date=parse_date(json_order['payment_date']), access_code=json_order['access_code'], progressive_discount=float(json_order['progressive_discount']), shipping_progressive_discount=float(json_order['shipping_progressive_discount']), shipment_integrator=json_order['shipment_integrator'], modified=datetime.strptime(json_order['modified'], '%Y-%m-%d %H:%M:%S'), printed=bool(json_order['printed']), interest=float(json_order['interest']), cart_additional_values_discount=float(json_order['cart_additional_values_discount']), cart_additional_values_increase=float(json_order['cart_additional_values_increase']), id_quotation=json_order['id_quotation'], estimated_delivery_date=parse_date(json_order['estimated_delivery_date']), external_code=json_order['external_code'], tracking_url=json_order['tracking_url'], has_payment=bool(int(json_order['has_payment'])), has_shipment=bool(int(json_order['has_shipment'])), has_invoice=bool(int(json_order['has_invoice'])), total_comission_user=float(json_order['total_comission_user']), total_comission=float(json_order['total_comission']), is_traceable=bool(json_order['is_traceable']), order_status_id=int(json_order['OrderStatus']['id']) ) def parse_order_status(self, json_order_status): return OrderStatus( id=int(json_order_status['id']), default=bool(int(json_order_status['default'])), type=json_order_status['type'], show_backoffice=bool(int(json_order_status['show_backoffice'])), allow_edit_order=bool(int(json_order_status['allow_edit_order'])), status=json_order_status['status'], description=json_order_status['description'], background=json_order_status['background'] ) def parse_order_products_sold(self, json_order_ps, order_id): return OrderProductsSold( order_id=order_id, products_sold_id=json_order_ps['id'] ) def save_orders(self, orders): for json_order in orders: json_order = json_order['Order'] order = self.parse_order(json_order) if 'OrderStatus' in json_order: json_order_status = json_order['OrderStatus'] order_status = self.parse_order_status(json_order_status) self.session.merge(order_status) if 'ProductsSold' in json_order: for json_ps in json_order['ProductsSold']: order_products_sold = self.parse_order_products_sold(json_ps, order.id) self.session.merge(order_products_sold) self.session.merge(order) self.session.commit()