Blame | Last modification | View Log | RSS feed
# -*- coding: utf-8 -*-'''Created on 29-Mar-2010@author: Chandranshu'''from datetime import date, timedeltafrom decimal import Decimalfrom elixir import *from math import ceilfrom random import randrangefrom reportlab.lib import colorsfrom reportlab.lib.enums import TA_CENTER, TA_JUSTIFYfrom reportlab.lib.styles import ParagraphStyle, getSampleStyleSheetfrom reportlab.lib.units import inch, mmfrom reportlab.pdfgen.canvas import Canvasfrom reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image, \BaseDocTemplate, Frame, PageTemplate, Table, TableStylefrom shop2020.clients.AlertClient import AlertClientfrom shop2020.clients.CRMClient import CRMClientfrom shop2020.clients.CatalogClient import CatalogClientfrom shop2020.clients.HelperClient import HelperClientfrom shop2020.clients.InventoryClient import InventoryClientfrom shop2020.clients.LogisticsClient import LogisticsClientfrom shop2020.clients.PaymentClient import PaymentClientfrom shop2020.clients.PromotionClient import PromotionClientfrom shop2020.clients.UserClient import UserClientfrom shop2020.clients.WarehouseClient import WarehouseClientfrom shop2020.config.client.ConfigClient import ConfigClientfrom shop2020.model.v1 import orderfrom shop2020.model.v1.order.impl import DataService, RechargeServicefrom shop2020.model.v1.order.impl.Convertors import to_t_emi_scheme, to_t_order, \cutoff_date, to_t_warehouse_addressfrom shop2020.model.v1.order.impl.DataAccessors import get_order, \get_transaction, get_orders_by_mobile_number, __clone_order, delhi_pincodes, \__create_recharge_voucher_tracker, __push_store_collection_to_hotspot, \get_hotspot_store, get_source_detailfrom shop2020.model.v1.order.impl.DataService import Transaction, LineItem, \Order, BatchNoGenerator, InvoiceIDGenerator, TransactionRequiringExtraProcessing, \OrderInventory, Alert, PaymentSettlement, EBSSettlementSummary, \CodVerificationAgent, Attribute, RechargeVoucherTracker, EmiScheme, MiscCharges, \BlockedIpRange, DeniedIpAddress, InsuranceDetailForOrder, DocumentStore, \RechargeTransaction, HotspotStore, WalletForCompany, WalletHistoryForCompany, \FRC, OperatorSeries, SourceDetail, Company, EbayOrder, AmazonFbaSalesSnapshot, \AmazonOrder, StoreOrderDetail, EdcBank, StoreOrderCollection, \HotspotServiceMatrix, SnapdealOrder, FlipkartOrder, DataInsuranceDetailForOrder, \AmazonFbaOrderReturns, FlipkartAdvantageOrder, InvoiceCounterGenerator, \TransactionShipmentSequence, HsOrder, Creditor, UserSanction, CreditHistory, \LoanHistory, ShipmentLogisticsCostDetail, ReturnOrderInfo, ReturnTransaction, \ReturnPickupRequest, SellerWarehouse, Seller, Organisation, \WarehouseAddressMapping, WarehouseAddressMasterfrom shop2020.model.v1.order.impl.model.BaseOrder import BaseOrderfrom shop2020.model.v1.order.impl.model.DTHRechargeOrder import DTHRechargeOrderfrom shop2020.model.v1.order.impl.model.MobileRechargeOrder import \MobileRechargeOrderfrom shop2020.model.v1.order.impl.model.RechargeDenomination import \RechargeDenominationfrom shop2020.model.v1.order.impl.model.RechargeOrder import RechargeOrderfrom shop2020.model.v1.order.impl.model.RechargePlan import RechargePlanfrom shop2020.model.v1.order.impl.model.ReturnOrder import ReturnOrderfrom shop2020.model.v1.order.impl.model.ServiceAvailability import \ServiceAvailabilityfrom shop2020.model.v1.order.impl.model.ServiceProvider import ServiceProviderfrom shop2020.model.v1.order.impl.model.TelecomCircle import TelecomCirclefrom shop2020.model.v1.order.impl.model.UserWallet import UserWalletfrom shop2020.model.v1.order.impl.model.UserWalletHistory import \UserWalletHistoryfrom shop2020.model.v1.user.impl.Converters import to_t_addressfrom shop2020.thriftpy.alert.ttypes import MonitoredEntity, EntityTypefrom shop2020.thriftpy.crm.ttypes import *from shop2020.thriftpy.logistics.ttypes import DeliveryType, PickUpTypefrom shop2020.thriftpy.model.v1.catalog.ttypes import ItemType, ItemConditionfrom shop2020.thriftpy.model.v1.inventory.ttypes import BillingType, \InventoryServiceException, WarehouseType, InventoryType, VatType, ItemInventoryfrom shop2020.thriftpy.model.v1.order.ttypes import TransactionServiceException, \TransactionStatus, OrderStatus, DelayReason, ExtraTransactionProcessingType, \HotspotAction, TimeoutSummary, OrderStatusGroups, OrderType, RechargeOrderStatus, \RechargeType, RechargeStatistics, DeviceNumberInfo, EmiChargeType, PayMethod, \OrderSource, StorePaymentStatus, ProductCondition, TaxType, \AmazonFCWarehouseLocation, RechargeMode, CreditTxnType, \CreditHistory as TCreditHistory, LoanHistory as TLoanHistory, \ShipmentLogisticsCostDetail as TShipmentLogisticsCostDetail, \ReturnTransactionStatus, ReturnAction, ReturnTxnResolutionStatus, \ReplacementShippingType, ReturnTxnPickupStatus, ReceivedReturnType, \ReturnPickupType, RefundType, SellerInfo, BuyerInfofrom shop2020.thriftpy.model.v1.user.ttypes import VoucherType, CouponCategory, \User, Sexfrom shop2020.thriftpy.payments.ttypes import PaymentExceptionfrom shop2020.thriftpy.utils.ttypes import UserSmsInfo, SmsTypefrom shop2020.thriftpy.warehouse.ttypes import ScanType, \WarehouseServiceExceptionfrom shop2020.utils.EmailAttachmentSender import mail, get_attachment_part, \mail_htmlfrom shop2020.utils.Utils import to_py_date, to_java_date, \getSyncOperatorsForRechargefrom sqlalchemy.orm.exc import NoResultFound, MultipleResultsFoundfrom sqlalchemy.sql import funcfrom sqlalchemy.sql.expression import and_, or_, desc, not_, distinct, cast, \betweenfrom string import Templatefrom suds.client import Clientfrom textwrap import dedentfrom xml.dom.minidom import parseStringimport MySQLdbimport base64import datetimeimport httplibimport loggingimport mathimport osimport reimport sysimport timeimport tracebackimport urllib#Start:- Added By Manish Sharma for Creating a new Ticket: Category- RTO Refund on 21-Jun-2013#End:- Added By Manish Sharma for Creating a new Ticket: Category- RTO Refund on 21-Jun-2013#Start:- Added By Manish Sharma for Creating a new Ticket: Category- RTO Refund on 21-Jun-2013#End:- Added By Manish Sharma for Creating a new Ticket: Category- RTO Refund on 21-Jun-2013logging.basicConfig(level=logging.DEBUG)sourceId = int(ConfigClient().get_property("sourceid"))capitalFloatPayMethod = 456789SaholicHelpEmailId = "Saholic <help@saholic.com>"mail_user = 'cnc.center@shop2020.in'mail_password = '5h0p2o2o'help_user = 'help@shop2020.in'help_password = '5h0p2o2o'source_url = 'www.saholic.com'source_name = 'Saholic'hotspot_store_url ='http://125.19.98.100/loaddetect/service.asmx?WSDL'aclient = NonePREPAID_SHIPPING_CUTOFF_TIME = 15COD_SHIPPING_CUTOFF_TIME = 12billedOrdersColorMap = {}ORDER_STATUS_TO_USER_TRUST_LEVEL_DELTA_DICT = {OrderStatus.RTO_RESHIPPED : 3,OrderStatus.RTO_IN_TRANSIT : -5,OrderStatus.DELIVERY_SUCCESS : 1,OrderStatus.DOA_CERT_INVALID : -5}creditTxnMultiplierMap = {CreditTxnType.BLOCKED : 1,CreditTxnType.BLOCKED_REVERSED : -1,CreditTxnType.LOAN : -1,CreditTxnType.CORRECTION : 1}loanTxnMultplierMap = {CreditTxnType.LOAN : 1,CreditTxnType.LOAN_CANCELLED : -1,CreditTxnType.PAID : -1,CreditTxnType.CORRECTION : -1}refund_status_transition = { OrderStatus.LOST_IN_TRANSIT : OrderStatus.LOST_IN_TRANSIT_REFUNDED,OrderStatus.RTO_RECEIVED_PRESTINE : OrderStatus.RTO_REFUNDED,OrderStatus.RTO_RECEIVED_DAMAGED : OrderStatus.RTO_DAMAGED_REFUNDED,OrderStatus.RTO_LOST_IN_TRANSIT : OrderStatus.RTO_LOST_IN_TRANSIT_REFUNDED,OrderStatus.DOA_CERT_INVALID : OrderStatus.DOA_INVALID_REFUNDED,OrderStatus.DOA_CERT_VALID : OrderStatus.DOA_VALID_REFUNDED,OrderStatus.DOA_RECEIVED_DAMAGED : OrderStatus.DOA_REFUNDED_RCVD_DAMAGED,OrderStatus.DOA_LOST_IN_TRANSIT : OrderStatus.DOA_REFUNDED_LOST_IN_TRANSIT,OrderStatus.RET_PRODUCT_UNUSABLE : OrderStatus.RET_PRODUCT_UNUSABLE_REFUNDED,OrderStatus.RET_PRODUCT_USABLE : OrderStatus.RET_PRODUCT_USABLE_REFUNDED,OrderStatus.RET_RECEIVED_DAMAGED : OrderStatus.RET_REFUNDED_RCVD_DAMAGED,OrderStatus.RET_LOST_IN_TRANSIT : OrderStatus.RET_REFUNDED_LOST_IN_TRANSIT,OrderStatus.COD_VERIFICATION_PENDING : OrderStatus.COD_VERIFICATION_FAILED,OrderStatus.SUBMITTED_FOR_PROCESSING : OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY,OrderStatus.INVENTORY_LOW : OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY,OrderStatus.LOW_INV_PO_RAISED : OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY,OrderStatus.LOW_INV_REVERSAL_IN_PROCESS : OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY,OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT : OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY,OrderStatus.ACCEPTED : OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY,OrderStatus.BILLED : OrderStatus.CANCELLED_ON_CUSTOMER_REQUEST,OrderStatus.CANCEL_REQUEST_CONFIRMED : OrderStatus.CANCELLED_ON_CUSTOMER_REQUEST}creditorTicketSizeMap = {}creditorDueDateMap = {}stateIdMap = {}def create_ebay_order(ebay_order):ebayOrder = EbayOrder()ebayOrder.orderId = ebay_order.orderIdebayOrder.paisaPayId = ebay_order.paisaPayIdebayOrder.salesRecordNumber = ebay_order.salesRecordNumberebayOrder.ebayListingId = ebay_order.ebayListingIdebayOrder.subsidyAmount = ebay_order.subsidyAmountebayOrder.ebayTxnDate = to_py_date(ebay_order.ebayTxnDate)ebayOrder.transactionId = ebay_order.transactionIdebayOrder.listingName = ebay_order.listingNameebayOrder.listingPrice = ebay_order.listingPricesession.commit()def get_ebay_order_by_sales_rec_number(sales_rec_number):return EbayOrder.query.filter(EbayOrder.salesRecordNumber == sales_rec_number).one()def get_ebay_order(sales_rec_number, listingId, paisa_pay_id):query = EbayOrder.queryif sales_rec_number:query = query.filter(EbayOrder.salesRecordNumber == sales_rec_number)if listingId:query = query.filter(EbayOrder.ebayListingId == listingId)if paisa_pay_id:query = query.filter(EbayOrder.paisaPayId == paisa_pay_id)return query.all()#return EbayOrder.query.filter(EbayOrder.salesRecordNumber == sales_rec_number).filter(EbayOrder.ebayListingId == listingId).one()def get_ebay_order_by_orderId(order_id):return EbayOrder.query.filter(EbayOrder.orderId == order_id).one()def update_ebay_order(ebay_order):ebayOrder = get_ebay_order_by_orderId(ebay_order.orderId)ebayOrder.subsidyAmount = ebay_order.subsidyAmountebayOrder.transactionId = ebay_order.transactionIdebayOrder.ebayTxnDate = to_py_date(ebay_order.ebayTxnDate)ebayOrder.bluedartPaisaPayRef = ebay_order.bluedartPaisaPayRefebayOrder.listingPrice = ebay_order.listingPricesession.commit()def ebay_order_exists(sales_rec_number, ebay_listing_id):try:ebayOrder = get_ebay_order_by_sales_rec_number(sales_rec_number)if ebayOrder.ebayListingId == ebay_listing_id:return Trueelse:return Falseexcept Exception as e:return Falsedef update_order_for_ebay(t_order):order = get_order(t_order.id)order.customer_id = t_order.customer_idorder.customer_name = t_order.customer_nameorder.customer_city = t_order.customer_cityorder.customer_state = t_order.customer_stateorder.customer_mobilenumber = t_order.customer_mobilenumberorder.customer_pincode = t_order.customer_pincodeorder.customer_address1 = t_order.customer_address1order.customer_address2 = t_order.customer_address2order.customer_email = t_order.customer_emailorder.logistics_provider_id = t_order.logistics_provider_idorder.airwaybill_no = t_order.airwaybill_noorder.tracking_id = t_order.tracking_idorder.status = t_order.statusorder.statusDescription = t_order.statusDescriptionorder.cod = 0order.otg = Falseorder.freebieItemId = 0order.orderType = OrderType.B2Corder.source = 6transaction = get_transaction(order.transaction_id)transaction.status = TransactionStatus.AUTHORIZEDtransaction.customer_id = t_order.customer_idsession.commit()def split_ebay_order(order_id, split_order_qty, split_order_item_id, use_power_ship):#In case of split now order is always assigned based on the website logic...Also itemId won't work for noworder = get_order(order_id)if split_order_qty >=order.lineitems[0].quantity:raise TransactionServiceException(108, "Split Quantity is greater than or equal to order quantity")if order.status not in [OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS, OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT, OrderStatus.CAPTURE_IN_PROCESS, OrderStatus.REJECTED, OrderStatus.ACCEPTED]:raise TransactionServiceException(108, "Order not allowed to be split")new_order = __clone_order(order, False, False)new_order.expected_delivery_time = order.expected_delivery_timenew_order.promised_delivery_time = order.promised_delivery_timenew_order.expected_shipping_time = order.expected_shipping_timenew_order.promised_shipping_time = order.promised_shipping_timeif use_power_ship:new_order.logistics_provider_id = order.logistics_provider_idnew_order.airwaybill_no = order.airwaybill_nonew_order.tracking_id = order.tracking_idnew_order.lineitems[0].quantity = split_order_qtynew_order.lineitems[0].total_price = new_order.lineitems[0].unit_price*split_order_qtynew_order.total_amount = new_order.lineitems[0].total_priceorder.lineitems[0].quantity = order.lineitems[0].quantity - split_order_qtyorder.lineitems[0].total_price = order.lineitems[0].unit_price * order.lineitems[0].quantityorder.total_amount = order.lineitems[0].total_pricesession.commit()return new_orderdef add_or_update_amazon_fba_sales_snapshot(amazonfbasalessnapshot):salesnapshotfordate = AmazonFbaSalesSnapshot.get_by(item_id = amazonfbasalessnapshot.item_id,dateOfSale=to_py_date(amazonfbasalessnapshot.dateOfSale).date(),fcLocation=amazonfbasalessnapshot.fcLocation)if salesnapshotfordate is None:amazon_fba_sales_snapshot = AmazonFbaSalesSnapshot()amazon_fba_sales_snapshot.dateOfSale = to_py_date(amazonfbasalessnapshot.dateOfSale).date()amazon_fba_sales_snapshot.item_id = amazonfbasalessnapshot.item_idamazon_fba_sales_snapshot.totalOrderCount = amazonfbasalessnapshot.totalOrderCountamazon_fba_sales_snapshot.amazonFbaInventory = amazonfbasalessnapshot.amazonFbaInventoryamazon_fba_sales_snapshot.isOutOfStock = amazonfbasalessnapshot.isOutOfStockamazon_fba_sales_snapshot.promotionOrderCount = amazonfbasalessnapshot.promotionOrderCountamazon_fba_sales_snapshot.totalSale = amazonfbasalessnapshot.totalSaleamazon_fba_sales_snapshot.promotionSale = amazonfbasalessnapshot.promotionSale#if amazonfbasalessnapshot.ourPrice is not None:amazon_fba_sales_snapshot.ourPriceSnapshotDate = to_py_date(amazonfbasalessnapshot.ourPriceSnapshotDate)amazon_fba_sales_snapshot.ourPrice = amazonfbasalessnapshot.ourPrice#if amazonfbasalessnapshot.salePrice is not None:amazon_fba_sales_snapshot.salePriceSnapshotDate = to_py_date(amazonfbasalessnapshot.salePriceSnapshotDate)amazon_fba_sales_snapshot.salePrice = amazonfbasalessnapshot.salePrice#if amazonfbasalessnapshot.minFbaPrice is not None:amazon_fba_sales_snapshot.minFbaPriceSnapshotDate = to_py_date(amazonfbasalessnapshot.minFbaPriceSnapshotDate)amazon_fba_sales_snapshot.minFbaPrice = amazonfbasalessnapshot.minFbaPrice#if amazonfbasalessnapshot.minMfnPrice is not None:amazon_fba_sales_snapshot.minMfnPriceSnapshotDate = to_py_date(amazonfbasalessnapshot.minMfnPriceSnapshotDate)amazon_fba_sales_snapshot.minMfnPrice = amazonfbasalessnapshot.minMfnPriceamazon_fba_sales_snapshot.fcLocation = amazonfbasalessnapshot.fcLocationelse:if(amazonfbasalessnapshot.totalOrderCount > 0):salesnapshotfordate.isOutOfStock = 0salesnapshotfordate.promotionOrderCount = amazonfbasalessnapshot.promotionOrderCountsalesnapshotfordate.totalSale = amazonfbasalessnapshot.totalSalesalesnapshotfordate.promotionSale = amazonfbasalessnapshot.promotionSalesalesnapshotfordate.totalOrderCount = amazonfbasalessnapshot.totalOrderCountsalesnapshotfordate.fcLocation = amazonfbasalessnapshot.fcLocationsession.commit()def get_amazon_fba_sales_snapshot_for_days(interval):query = session.query(Order.status, func.count(Order.id)).group_by(Order.status)date = datetime.datetime.now()toDate = date-timedelta(days = 1)fromDate = toDate-timedelta(days = interval)fbasalessnapshot = AmazonFbaSalesSnapshot.query.filter(AmazonFbaSalesSnapshot.dateOfSale.between (fromDate.date(),toDate.date())).order_by(AmazonFbaSalesSnapshot.dateOfSale).all()return fbasalessnapshotdef create_snapdeal_order(t_snapdeal_order):snapdealOrder = SnapdealOrder()snapdealOrder.orderId = t_snapdeal_order.orderIdsnapdealOrder.subOrderId = t_snapdeal_order.subOrderIdsnapdealOrder.referenceCode = t_snapdeal_order.referenceCodesnapdealOrder.productName = t_snapdeal_order.productNamesnapdealOrder.listingPrice = t_snapdeal_order.listingPricesnapdealOrder.snapdealTxnDate = to_py_date(t_snapdeal_order.snapdealTxnDate)snapdealOrder.maxNlc = t_snapdeal_order.maxNlcorder = Order.get_by(id=t_snapdeal_order.orderId)order.status = OrderStatus.ACCEPTEDuser = Nonetry:user_client = UserClient().get_client()user_to_add = User()user_to_add.email = 'SD.'+ str(t_snapdeal_order.orderId) + '@mailinator.com'user_to_add.password = 'hSp5gvCsrrhZcceE6mzzOQ'user_to_add.communicationEmail = user_to_add.emailuser_to_add.sourceStartTime = int(round(time.time() * 1000))user_to_add.sourceId = OrderSource.SNAPDEALuser_to_add.sex = Sex.WONT_SAYuser_to_add = user_client.createUser(user_to_add)user = user_to_addexcept:passif user:order.customer_id = user.userIdorder.customer_email = user.emailsession.commit()def get_snapdeal_order(order_id, reference_code, subOrder_id):query = SnapdealOrder.queryif order_id:query = query.filter(SnapdealOrder.orderId == order_id)elif reference_code==subOrder_id:if reference_code is None:reference_code=''query = query.filter(or_(SnapdealOrder.referenceCode == reference_code, SnapdealOrder.subOrderId== subOrder_id))else:query = query.filter(and_(SnapdealOrder.referenceCode == reference_code, SnapdealOrder.subOrderId== subOrder_id))return query.one()return query.all()def snapdeal_order_exists(suborder_id, reference_code):exists = SnapdealOrder.query.filter_by(subOrderId=suborder_id,referenceCode=reference_code).first()if exists is not None:return Trueelse:return Falsedef get_amazon_fba_sales_latest_snapshot_for_item(item_id):return AmazonFbaSalesSnapshot.query.filter(AmazonFbaSalesSnapshot.item_id==item_id).filter(AmazonFbaSalesSnapshot.dateOfSale!=datetime.datetime.now().date()).order_by(desc(AmazonFbaSalesSnapshot.dateOfSale)).first()def update_latest_fba_prices_for_item(fbaitemprices):fbasalessnapshot = AmazonFbaSalesSnapshot.query.filter(AmazonFbaSalesSnapshot.item_id==fbaitemprices.item_id).order_by(desc(AmazonFbaSalesSnapshot.dateOfSale)).first()if(fbasalessnapshot.ourPriceSnapshotDate < to_java_date(fbaitemprices.ourPriceSnapshotDate) and fbaitemprices.ourPrice is not None):fbasalessnapshot.ourPriceSnapshotDate = to_py_date(fbaitemprices.ourPriceSnapshotDate)fbasalessnapshot.ourPrice = fbaitemprices.ourPriceif(fbasalessnapshot.salePriceSnapshotDate < to_java_date(fbaitemprices.salePriceSnapshotDate) and fbaitemprices.salePrice is not None):fbasalessnapshot.salePriceSnapshotDate = to_py_date(fbaitemprices.salePriceSnapshotDate)fbasalessnapshot.salePrice = fbaitemprices.salePriceif(fbasalessnapshot.minFbaPriceSnapshotDate < to_java_date(fbaitemprices.minFbaPriceSnapshotDate) and fbaitemprices.minFbaPrice is not None):fbasalessnapshot.minFbaPriceSnapshotDate = to_py_date(fbaitemprices.minFbaPriceSnapshotDate)fbasalessnapshot.minFbaPrice = fbaitemprices.minFbaPriceif(fbasalessnapshot.minMfnPriceSnapshotDate < to_java_date(fbaitemprices.minMfnPriceSnapshotDate) and fbaitemprices.minMfnPrice is not None):fbasalessnapshot.minMfnPriceSnapshotDate = to_py_date(fbaitemprices.minMfnPriceSnapshotDate)fbasalessnapshot.minMfnPrice = fbaitemprices.minMfnPricesession.commit()def flipkart_order_exists(orderid,suborderid):exists = FlipkartOrder.query.filter_by(flipkartOrderId=orderid,flipkartSubOrderId=suborderid).first()if exists is not None:return Trueelse:return Falsedef create_flipkart_order(flipkartorder):order = FlipkartOrder()order.orderId = flipkartorder.orderIdorder.flipkartSubOrderId = flipkartorder.flipkartSubOrderIdorder.flipkartOrderId = flipkartorder.flipkartOrderIdorder.flipkartTxnDate = to_py_date(flipkartorder.flipkartTxnDate)order.shippingPrice = flipkartorder.shippingPriceorder.octroiFee = flipkartorder.octroiFeeorder.emiFee = flipkartorder.emiFeeorder.maxNlc = flipkartorder.maxNlcs_order = Order.get_by(id=flipkartorder.orderId)if s_order.cod:s_order.status = OrderStatus.COD_VERIFICATION_PENDINGelse:s_order.status = OrderStatus.ACCEPTEDs_order.accepted_timetsmap = datetime.datetime.now()user = Nonetry:user_client = UserClient().get_client()user_to_add = User()user_to_add.email = 'FK.'+ str(flipkartorder.orderId) + '@mailinator.com'user_to_add.password = 'gR9zF-Ish2im6tbYFNivgA'user_to_add.communicationEmail = user_to_add.emailuser_to_add.sourceStartTime = int(round(time.time() * 1000))user_to_add.sourceId = OrderSource.FLIPKARTuser_to_add.sex = Sex.WONT_SAYuser_to_add = user_client.createUser(user_to_add)user = user_to_addexcept:passif user:s_order.customer_id = user.userIds_order.customer_email = user.emailsession.commit()def get_flipkart_order(orderid):flipkartorder = FlipkartOrder.query.filter_by(orderId=orderid).first()if not flipkartorder:print "No found order for orderid " + str(orderid)raise TransactionServiceException(108, "no such order")return flipkartorderdef get_flipkart_order_by_subOrderId(flipkartOrderItemId):flipkartorder = FlipkartOrder.query.filter_by(flipkartSubOrderId=flipkartOrderItemId).first()if not flipkartorder:raise TransactionServiceException(108, "no such flipkart order " + str(flipkartOrderItemId))return flipkartorderdef update_flipkart_order_dates_and_awb(orderid,suborderid,date,awb):flipkartorder = FlipkartOrder.query.filter_by(flipkartOrderId=orderid,flipkartSubOrderId=suborderid).first()print flipkartorderorder = get_order(flipkartorder.orderId)if not order:print "No found order for orderid " + str(orderid)raise TransactionServiceException(108, "no such order")order.tracking_id = awborder.expected_delivery_time = to_py_date(date + 4*24*60*60*1000)order.promised_delivery_time = to_py_date(date + 4*24*60*60*1000)order.expected_shipping_time = to_py_date(date)order.promised_shipping_time = to_py_date(date)session.commit()def update_snapdeal_orders_status(orders):for statusString, orderList in orders.iteritems():if statusString == "Cancelled":try:for cancel_order in orderList:ref_code = cancel_order[0]sub_order_code = cancel_order[1]snapdeal_order = Nonetry:snapdeal_order = get_snapdeal_order(None, ref_code, sub_order_code)except Exception as e:print 'Caught in Updation of Cancelled Orders Getting Snapdeal Order'passif snapdeal_order:order = get_order(snapdeal_order.orderId)if order.status == OrderStatus.SHIPPED_FROM_WH:order.status = OrderStatus.SHIPPED_TO_LOGSTsession.commit()except Exception as e:print 'Caught in Updation of Cancelled Orders'print eprint sys.exc_info()if statusString == "Delivered":try:for del_order in orderList:ref_code = del_order[0]sub_order_code = del_order[1]dlvry_timestamp = del_order[2]snapdeal_order = Nonetry:snapdeal_order = get_snapdeal_order(None, ref_code, sub_order_code)except Exception as e:print 'Caught in Updation of Delivered Orders Getting Snapdeal Order'passif snapdeal_order:order = get_order(snapdeal_order.orderId)if order.status == OrderStatus.SHIPPED_FROM_WH:order.delivery_timestamp = datetime.datetime.strptime(dlvry_timestamp, "%Y-%m-%d %H:%M:%S")order.receiver = order.customer_nameorder.status = OrderStatus.DELIVERY_SUCCESSorder.statusDescription = "Order delivered"session.commit()except Exception as e:print 'Caught in Updation of Delivered Orders'print eprint sys.exc_info()'''try:for del_order in delivered_orders:ref_code = del_order[0]sub_order_code = del_order[1]dlvry_timestamp = del_order[2]if snapdeal_order_exists(sub_order_code, ref_code):snapdeal_order = get_snapdeal_order(None, None, sub_order_code)if snapdeal_order:order = get_order(snapdeal_order.orderId)if order.status == OrderStatus.SHIPPED_FROM_WH:order.delivery_timestamp = datetime.datetime.strptime(dlvry_timestamp, "%Y-%m-%d %H:%M:%S")order.receiver = order.customer_nameorder.status = OrderStatus.DELIVERY_SUCCESSorder.statusDescription = "Order delivered"session.commit()except Exception as e:print eprint sys.exc_info()'''def update_flipkart_orders_status(delivered_orders):try:for del_order in delivered_orders:flipkart_order_id = del_order[0]sub_order_code = del_order[1]dlvry_timestamp = del_order[2]if flipkart_order_exists(flipkart_order_id,sub_order_code):flipkart_order = get_flipkart_order_by_subOrderId(sub_order_code)if flipkart_order:order = get_order(flipkart_order.orderId)if order.status == OrderStatus.SHIPPED_FROM_WH:order.delivery_timestamp = datetime.datetime.strptime(dlvry_timestamp, "%Y-%m-%d %H:%M:%S")order.receiver = order.customer_nameorder.status = OrderStatus.DELIVERY_SUCCESSorder.statusDescription = "Order delivered"session.commit()except Exception as e:print eprint sys.exc_info()'''order_ids = delivered_orders.keys()for orderId in order_ids:order = Order.query.filter(Order.id == orderId).first()order.status = OrderStatus.DELIVERY_SUCCESSorder.statusDescription = "Order delivered"order.delivery_timestamp = datetime.datetime.strptime(delivered_orders.get(orderId), "%Y-%m-%d %H:%M:%S")session.commit()'''def bulk_add_or_update_amazon_fba_sales_snapshot(amazonfbasalessnapshotlist):for amazonfbasalessnapshot in amazonfbasalessnapshotlist:salesnapshotfordate = AmazonFbaSalesSnapshot.get_by(item_id = amazonfbasalessnapshot.item_id,dateOfSale=to_py_date(amazonfbasalessnapshot.dateOfSale).date(),fcLocation=amazonfbasalessnapshot.fcLocation)if salesnapshotfordate is None:amazon_fba_sales_snapshot = AmazonFbaSalesSnapshot()amazon_fba_sales_snapshot.dateOfSale = to_py_date(amazonfbasalessnapshot.dateOfSale).date()amazon_fba_sales_snapshot.item_id = amazonfbasalessnapshot.item_idamazon_fba_sales_snapshot.totalOrderCount = amazonfbasalessnapshot.totalOrderCountamazon_fba_sales_snapshot.amazonFbaInventory = amazonfbasalessnapshot.amazonFbaInventoryamazon_fba_sales_snapshot.isOutOfStock = amazonfbasalessnapshot.isOutOfStockamazon_fba_sales_snapshot.promotionOrderCount = amazonfbasalessnapshot.promotionOrderCountamazon_fba_sales_snapshot.totalSale = amazonfbasalessnapshot.totalSaleamazon_fba_sales_snapshot.promotionSale = amazonfbasalessnapshot.promotionSale#if amazonfbasalessnapshot.ourPrice is not None:amazon_fba_sales_snapshot.ourPriceSnapshotDate = to_py_date(amazonfbasalessnapshot.ourPriceSnapshotDate)amazon_fba_sales_snapshot.ourPrice = amazonfbasalessnapshot.ourPrice#if amazonfbasalessnapshot.salePrice is not None:amazon_fba_sales_snapshot.salePriceSnapshotDate = to_py_date(amazonfbasalessnapshot.salePriceSnapshotDate)amazon_fba_sales_snapshot.salePrice = amazonfbasalessnapshot.salePrice#if amazonfbasalessnapshot.minFbaPrice is not None:amazon_fba_sales_snapshot.minFbaPriceSnapshotDate = to_py_date(amazonfbasalessnapshot.minFbaPriceSnapshotDate)amazon_fba_sales_snapshot.minFbaPrice = amazonfbasalessnapshot.minFbaPrice#if amazonfbasalessnapshot.minMfnPrice is not None:amazon_fba_sales_snapshot.minMfnPriceSnapshotDate = to_py_date(amazonfbasalessnapshot.minMfnPriceSnapshotDate)amazon_fba_sales_snapshot.minMfnPrice = amazonfbasalessnapshot.minMfnPriceamazon_fba_sales_snapshot.fcLocation = amazonfbasalessnapshot.fcLocationelse:if(amazonfbasalessnapshot.totalOrderCount > 0):salesnapshotfordate.isOutOfStock = 0salesnapshotfordate.promotionOrderCount = amazonfbasalessnapshot.promotionOrderCountsalesnapshotfordate.totalSale = amazonfbasalessnapshot.totalSalesalesnapshotfordate.promotionSale = amazonfbasalessnapshot.promotionSalesalesnapshotfordate.totalOrderCount = amazonfbasalessnapshot.totalOrderCountsalesnapshotfordate.fcLocation = amazonfbasalessnapshot.fcLocationsession.commit()def get_created_orders_for_flipkart(flipkartorderids):item_ordercount = dict()orders = []flipkart_orders = session.query(FlipkartOrder).filter(FlipkartOrder.flipkartOrderId.in_(tuple(flipkartorderids))).all()print flipkart_ordersif len(flipkart_orders)!=0:for order in flipkart_orders:print order.orderIdorders.append(order.orderId)items =session.query(LineItem.item_id,func.count(LineItem.quantity)).join((Order,LineItem.order_id==Order.id)).filter(Order.id.in_(tuple(orders))).filter(Order.status >=3).filter(Order.shipping_timestamp==None).group_by(LineItem.item_id).all()else:return item_ordercountprint "items map after query"print itemsfor item in items:print "item id"print item[0]print "order count"print item[1]item_ordercount[item[0]] = item[1]print item_ordercountreturn item_ordercountdef change_easyship_mfn_order_txn_status(transaction_id, new_status, description, pickUp, orderType, source, shipTimestamp, deliveryTimeStamp):transaction = get_transaction(transaction_id)transaction.status = new_statustransaction.status_message = description## Assign runner in case of delhi pincodesif transaction.orders[0].pickupStoreId:logistics_client = LogisticsClient().get_client()store = logistics_client.getPickupStore(transaction.orders[0].pickupStoreId)if delhi_pincodes.__contains__(store.pin):pickUp = PickUpType.RUNNERif new_status == TransactionStatus.FAILED:for order in transaction.orders:order.status = OrderStatus.PAYMENT_FAILEDorder.statusDescription = "Payment Failed"elif new_status == TransactionStatus.AUTHORIZED or new_status == TransactionStatus.FLAGGED:for order in transaction.orders:if new_status == TransactionStatus.AUTHORIZED:order.status = OrderStatus.SUBMITTED_FOR_PROCESSINGorder.statusDescription = "Submitted to warehouse"elif new_status == TransactionStatus.FLAGGED:order.status = OrderStatus.PAYMENT_FLAGGEDorder.statusDescription = "Payment flagged by gateway"order.cod = Falseorder.orderType = orderType#After we got payment success, we will set logistics info alsologistics_client = LogisticsClient().get_client()#FIXME line item is only one now. If multiple will come, need to fix.item_id = order.lineitems[0].item_idlogistics_info = logistics_client.getLogisticsInfo(order.customer_pincode, item_id, DeliveryType.PREPAID, pickUp)#current_time = datetime.datetime.now()#logistics_info.deliveryTime = adjust_delivery_time(to_py_date(deliveryTimeStamp), 0)#logistics_info.shippingTime = adjust_delivery_time(to_py_date(shipTimestamp), 0)#logistics_info.deliveryDelay = 0order.otg = logistics_info.otgAvailableorder.warehouse_id = logistics_info.warehouseIdorder.fulfilmentWarehouseId = logistics_info.fulfilmentWarehouseIdorder.logistics_provider_id = 45#Start:- Added by Manish Sharma for FedEx Integration - Shipment Creation on 31-Jul-2013#order.airwaybill_no = logistics_info.airway_billno#order.tracking_id = order.airwaybill_no#End:- Added by Manish Sharma for FedEx Integration- Shipment Creation on 31-Jul-2013order.courier_delivery_time = to_py_date(deliveryTimeStamp).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)order.expected_shipping_time = to_py_date(shipTimestamp).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)order.promised_shipping_time = order.expected_shipping_timeorder.expected_delivery_time = to_py_date(deliveryTimeStamp).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)order.promised_delivery_time = order.expected_delivery_timeif order.pickupStoreId:order.otg = Falseinventory_client = InventoryClient().get_client()if order.productCondition != ProductCondition.BAD:inventory_client.reserveItemInWarehouse(item_id, logistics_info.fulfilmentWarehouseId, sourceId, order.id, to_java_date(order.created_timestamp), to_java_date(order.promised_shipping_time), order.lineitems[0].quantity)try:item_pricing = inventory_client.getItemPricing(item_id, -1)order.lineitems[0].transfer_price = item_pricing.transferPriceorder.lineitems[0].nlc = item_pricing.nlcexcept:print "Not able to get transfer price. Skipping"catalog_client = CatalogClient().get_client()voucherAmount = catalog_client.getVoucherAmount(item_id, VoucherType.SPICEDECK_MOBILE)if voucherAmount:__create_recharge_voucher_tracker(order, voucherAmount, VoucherType.SPICEDECK_MOBILE)#Note 2 Buy back Offerif item_id in (7974, 7558) and transaction.coupon_code is not None and transaction.coupon_code.lower() == "note2buyback":order.status = OrderStatus.COD_VERIFICATION_PENDINGorder.statusDescription = "Note 2 Buy Back Offer - Approval Pending from CRM Team"order.otg = Falseelif new_status == TransactionStatus.COD_IN_PROCESS:for order in transaction.orders:order.status = OrderStatus.COD_VERIFICATION_PENDINGorder.statusDescription = "Verification Pending"order.cod = Trueorder.orderType = orderType#After we got payment success, we will set logistics info alsologistics_client = LogisticsClient().get_client()#FIXME line item is only one now. If multiple will come, need to fix.item_id = order.lineitems[0].item_idif order.pickupStoreId:# Need to send prepaid awb number for store pick up orderslogistics_info = logistics_client.getLogisticsEstimation(item_id, order.customer_pincode, DeliveryType.COD)#//Start:- Added by Manish Sharma for FedEx Integration- Shipment Creation on 31-Jul-2013#prepaid_logistics_info = logistics_client.getLogisticsInfo(order.customer_pincode, item_id, DeliveryType.PREPAID, pickUp)#logistics_info.airway_billno = prepaid_logistics_info.airway_billno#logistics_info.providerId = prepaid_logistics_info.providerId#End:- Added by Manish Sharma for FedEx Integration- Shipment Creation on 31-Jul-2013# Will not provide OTG in pickup storeorder.otg = Falseelse:logistics_info = logistics_client.getLogisticsInfo(order.customer_pincode, item_id, DeliveryType.COD, pickUp)order.otg = logistics_info.otgAvailable#current_time = datetime.datetime.now()#logistics_info.deliveryTime = adjust_delivery_time(current_time, logistics_info.deliveryTime)#logistics_info.shippingTime = adjust_delivery_time(current_time, logistics_info.shippingTime)#logistics_info.deliveryDelay = adjust_delivery_time(current_time, (logistics_info.shippingTime+logistics_info.deliveryDelay))order.warehouse_id = logistics_info.warehouseIdorder.fulfilmentWarehouseId = logistics_info.fulfilmentWarehouseIdorder.logistics_provider_id = 45#Start:- Added by Manish Sharma for FedEx Integration- Shipment Creation on 31-Jul-2013#order.airwaybill_no = logistics_info.airway_billno#order.tracking_id = order.airwaybill_no#End:- Added by Manish Sharma for FedEx Integration- Shipment Creation on 31-Jul-2013order.courier_delivery_time = to_py_date(deliveryTimeStamp).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)order.expected_shipping_time = to_py_date(shipTimestamp).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)order.promised_shipping_time = order.expected_shipping_timeorder.expected_delivery_time = to_py_date(deliveryTimeStamp).replace(hour=PREPAID_SHIPPING_CUTOFF_TIME, minute=0, second=0)order.promised_delivery_time = order.expected_delivery_timeinventory_client = InventoryClient().get_client()if order.productCondition != ProductCondition.BAD:inventory_client.reserveItemInWarehouse(item_id, logistics_info.fulfilmentWarehouseId, sourceId, order.id, to_java_date(order.created_timestamp), to_java_date(order.promised_shipping_time), order.lineitems[0].quantity)try:item_pricing = inventory_client.getItemPricing(item_id, -1)order.lineitems[0].transfer_price = item_pricing.transferPriceorder.lineitems[0].nlc = item_pricing.nlcexcept:print "Not able to get transfer price. Skipping"catalog_client = CatalogClient().get_client()voucherAmount = catalog_client.getVoucherAmount(item_id, VoucherType.SPICEDECK_MOBILE)if voucherAmount:__create_recharge_voucher_tracker(order, voucherAmount, VoucherType.SPICEDECK_MOBILE)session.commit()if new_status in (TransactionStatus.AUTHORIZED, TransactionStatus.FLAGGED, TransactionStatus.COD_IN_PROCESS):try:if order.source == OrderSource.WEBSITE:if new_status == TransactionStatus.COD_IN_PROCESS:transaction_requiring_extra_processing = TransactionRequiringExtraProcessing()transaction_requiring_extra_processing.category = 'COD_VERIFICATION'transaction_requiring_extra_processing.transaction_id = transaction_idsession.commit()elif new_status == TransactionStatus.FLAGGED:transaction_requiring_extra_processing = TransactionRequiringExtraProcessing()transaction_requiring_extra_processing.category = 'PAYMENT_FLAGGED'transaction_requiring_extra_processing.transaction_id = transaction_idsession.commit()elif order.source == OrderSource.STORE:order.otg = Falsesession.commit()catalog_client = CatalogClient().get_client()sourcePricing = catalog_client.getStorePricing(order.lineitems[0].item_id)if order.total_amount >= sourcePricing.minPrice:order.status = OrderStatus.SUBMITTED_FOR_PROCESSINGorder.statusDescription = "Order Accepted"session.commit()sod = StoreOrderDetail.get_by(orderId = order.id)__push_store_collection_to_hotspot(order, "advance", sod.cashAmount, sod.cardAmount)else:order.status = OrderStatus.COD_VERIFICATION_PENDINGorder.statusDescription = "Approval Pending"content = "<html><body>"content += "<h4>Order Id: " + str(order.id) + "</h4>"content += "<h4>Product: " + str(order.lineitems[0]) + "</h4>"content += "<h4>Min Price: " + str(sourcePricing.minPrice) + "</h4>"content += "<h4>Recommended Price: " + str(sourcePricing.recommendedPrice) + "</h4>"content += "<h2>Approval Requested for Price: " + str(order.total_amount) + "</h2>"content += "<h2>Note 1: If this discount price is approved then reply 'Approved' otherwise 'Not Approved' without changing anythig in the Mail.</h2>"content += "<h2>Note 2: For Quick approval using browser <a href='http://support.shop2020.in:8080/Support/price-approval?xszbg=" + base64.b64encode(str(order.id)) + "'>Click Here</a></h2>"content += "<br><br></body></html>"store = get_hotspot_store(order.storeId, "")helper_client = HelperClient().get_client()helper_client.saveUserEmailForSending(store.approvalEmail.split(';'), SaholicHelpEmailId, "Price approval requested for " + str(order.lineitems[0]) + " order Id " + str(order.id) + " in store " + store.hotspotId , content, str(transaction_id), "PriceApproval", [], [], order.source)session.commit()else:order.otg = Falsesession.commit()except Exception as e:print "Error inserting transaction Id: " + str(transaction_id) + " due to " + str(e)return Truedef update_amazon_fba_order_returns(fbaOrderReturns):for order_return in fbaOrderReturns:orderReturn = AmazonFbaOrderReturns.query.filter(AmazonFbaOrderReturns.amazonOrderId==order_return.amazonOrderId).filter(AmazonFbaOrderReturns.insertionTimestamp == to_py_date(order_return.insertionTimestamp)).filter(AmazonFbaOrderReturns.sku==order_return.sku).first()if orderReturn:orderReturn.sellableReturnQuantity = order_return.sellableReturnQuantityorderReturn.nonSellableReturnQuantity = order_return.nonSellableReturnQuantitysession.commit()else:orderReturn = AmazonFbaOrderReturns()orderReturn.amazonOrderId = order_return.amazonOrderIdorderReturn.insertionTimestamp = to_py_date(order_return.insertionTimestamp)orderReturn.sku = order_return.skuorderReturn.creationTimestamp = to_py_date(order_return.creationTimestamp)orderReturn.shippedQuantity = order_return.shippedQuantityorderReturn.sellableReturnQuantity = order_return.sellableReturnQuantityorderReturn.nonSellableReturnQuantity = order_return.nonSellableReturnQuantitysession.commit()def get_all_amazon_fba_order_returns(insertionTimestamp):returns = AmazonFbaOrderReturns.query.filter(AmazonFbaOrderReturns.insertionTimestamp==to_py_date(insertionTimestamp)).all()if not returns:returns = []return returnsdef get_total_sale_returns_fba_skus_curent_time(insertionTimestamp):allFbaSkuDetails = session.query(AmazonFbaOrderReturns.sku, func.sum(AmazonFbaOrderReturns.shippedQuantity), func.sum(AmazonFbaOrderReturns.sellableReturnQuantity), func.sum(AmazonFbaOrderReturns.nonSellableReturnQuantity)).group_by(AmazonFbaOrderReturns.sku).filter(AmazonFbaOrderReturns.insertionTimestamp == to_py_date(insertionTimestamp)).all()returnAllFbaSkuDetails = {}for fbaSkuDetail in allFbaSkuDetails:saleReturnDetail = {}saleReturnDetail['Sale'] = fbaSkuDetail[1]saleReturnDetail['SaleableReturn'] = fbaSkuDetail[2]saleReturnDetail['NonSaleableReturn'] = fbaSkuDetail[3]returnAllFbaSkuDetails[fbaSkuDetail[0]]= saleReturnDetailreturn returnAllFbaSkuDetailsdef get_amazon_fba_sales_latest_snapshot_for_item_location_wise(item_id,location):return AmazonFbaSalesSnapshot.query.filter(AmazonFbaSalesSnapshot.item_id==item_id).filter(AmazonFbaSalesSnapshot.fcLocation==location).filter(AmazonFbaSalesSnapshot.dateOfSale!=datetime.datetime.now().date()).order_by(desc(AmazonFbaSalesSnapshot.dateOfSale)).first()def get_verification_pending_orders_fk():retOrders = Order.query.filter(Order.source==OrderSource.FLIPKART).filter(Order.status==OrderStatus.COD_VERIFICATION_PENDING).all()retFkOrders = []order_ids = []if not retOrders:return retFkOrderselse:for order in retOrders:order_ids.append(order.id)retFkOrders = FlipkartOrder.query.filter(FlipkartOrder.orderId.in_(tuple(order_ids)))if not retFkOrders:retFkOrders = []return retFkOrdersdef get_fa_order_by_fk_order_id(fk_OrderId,fk_OrderItemId):faOrder = FlipkartAdvantageOrder.query.filter_by(fkOrderId=fk_OrderId,fkOrderItemId=fk_OrderItemId).first()if not faOrder:print "Not found order for orderId " + str(fk_OrderId)raise TransactionServiceException(108, "no such order")return faOrderdef flipkart_fa_order_exists(fk_OrderId,fk_OrderItemId):faOrder = FlipkartAdvantageOrder.query.filter_by(fkOrderId=fk_OrderId,fkOrderItemId=fk_OrderItemId).first()if not faOrder:return Falseelse:return Truedef get_all_fa_orders_list(status):faOrders = Noneif status == 'all':faOrders = FlipkartAdvantageOrder.query.all()else:faOrders = FlipkartAdvantageOrder.query.filter(FlipkartAdvantageOrder.status==status).all()if not faOrders:faOrders = []return faOrdersdef add_update_fa_orders_bulk(faOrdersList):for faOrder in faOrdersList:if faOrder.status == 'approved':fa_Order = FlipkartAdvantageOrder()fa_Order.fkOrderId = faOrder.fkOrderIdfa_Order.fkOrderItemId = faOrder.fkOrderItemIdfa_Order.sku = faOrder.skufa_Order.creationTimestamp = to_py_date(faOrder.creationTimestamp)fa_Order.customerName = faOrder.customerNamefa_Order.customerAddress = faOrder.customerAddressfa_Order.pincode = faOrder.pincodefa_Order.customerCity = faOrder.customerCityfa_Order.customerState = faOrder.customerStatefa_Order.customerPhone = faOrder.customerPhonefa_Order.status = faOrder.statusfa_Order.quantity = faOrder.quantityfa_Order.totalPrice = faOrder.totalPricefa_Order.listPrice = faOrder.listPricefa_Order.modifiedDate = to_py_date(faOrder.modifiedDate)fa_Order.listingId = faOrder.listingIdfa_Order.cancelReason = faOrder.cancelReasonfa_Order.returnReason = faOrder.returnReasonfa_Order.freebieItemId = faOrder.freebieItemIdfa_Order.productTitle = faOrder.productTitleelse:fa_Order = FlipkartAdvantageOrder.query.filter_by(fkOrderId=faOrder.fkOrderId,fkOrderItemId=faOrder.fkOrderItemId).first()if fa_Order:if fa_Order.status !=faOrder.status:fa_Order.status = faOrder.statusfa_Order.cancelReason = faOrder.cancelReasonfa_Order.returnReason = faOrder.returnReasonfa_Order.modifiedDate = to_py_date(faOrder.modifiedDate)else:fa_Order = FlipkartAdvantageOrder()fa_Order.fkOrderId = faOrder.fkOrderIdfa_Order.fkOrderItemId = faOrder.fkOrderItemIdfa_Order.sku = faOrder.skufa_Order.creationTimestamp = to_py_date(faOrder.creationTimestamp)fa_Order.customerName = faOrder.customerNamefa_Order.customerAddress = faOrder.customerAddressfa_Order.pincode = faOrder.pincodefa_Order.customerCity = faOrder.customerCityfa_Order.customerState = faOrder.customerStatefa_Order.customerPhone = faOrder.customerPhonefa_Order.status = faOrder.statusfa_Order.quantity = faOrder.quantityfa_Order.totalPrice = faOrder.totalPricefa_Order.listPrice = faOrder.listPricefa_Order.modifiedDate = to_py_date(faOrder.modifiedDate)fa_Order.listingId = faOrder.listingIdfa_Order.cancelReason = faOrder.cancelReasonfa_Order.returnReason = faOrder.returnReasonfa_Order.freebieItemId = faOrder.freebieItemIdfa_Order.productTitle = faOrder.productTitlesession.commit()def create_homeshop_order(hsOrder):hs_Order = HsOrder()hs_Order.orderId = hsOrder.orderIdhs_Order.catalogueName = hsOrder.catalogueNamehs_Order.courierName = hsOrder.courierNamehs_Order.hsItemId = hsOrder.hsItemIdhs_Order.hsOrderDate = to_py_date(hsOrder.hsOrderDate)hs_Order.hsOrderNo = hsOrder.hsOrderNohs_Order.hsProductId = hsOrder.hsProductIdhs_Order.hsSubOrderNo = hsOrder.hsSubOrderNohs_Order.paymentMode = hsOrder.paymentModehs_Order.sellerSku = hsOrder.sellerSkuhs_Order.slaDays = hsOrder.slaDayshs_Order.shippingName = hsOrder.shippingNameorder = Order.get_by(id=hsOrder.orderId)order.status = OrderStatus.ACCEPTEDorder.accepted_timestamp = datetime.datetime.now()user = Nonetry:user_client = UserClient().get_client()user_to_add = User()user_to_add.email = 'HS.'+ str(hsOrder.orderId) + '@mailinator.com'user_to_add.password = 'ouBPONyDYWfeAFtXeaYRkQ'user_to_add.communicationEmail = user_to_add.emailuser_to_add.sourceStartTime = int(round(time.time() * 1000))user_to_add.sourceId = OrderSource.HOMESHOP18user_to_add.sex = Sex.WONT_SAYuser_to_add = user_client.createUser(user_to_add)user = user_to_addexcept:passif user:order.customer_id = user.userIdorder.customer_email = user.emailsession.commit()def get_homeshop_order(order_id, hsOrderNo, hsSubOrderNo):query = HsOrder.queryif order_id:query = query.filter(HsOrder.orderId == order_id)if hsOrderNo:query = query.filter(HsOrder.hsOrderNo == hsOrderNo)if hsSubOrderNo:query = query.filter(HsOrder.hsSubOrderNo == hsSubOrderNo)return query.all()def homeshop_order_exists(hs_OrderNo, hs_SubOrderNo):exists = HsOrder.query.filter_by(hsOrderNo=hs_OrderNo,hsSubOrderNo=hs_SubOrderNo).first()if exists is not None:return Trueelse:return Falsedef update_timestamp_for_amazon_order(orderDeliveryMap):for orderId,dateMap in orderDeliveryMap.iteritems():order = get_order(orderId)order.expected_delivery_time = datetime.datetime.strptime(dateMap.values()[0]+' 15:00:00', '%d-%m-%Y %H:%M:%S')order.promised_delivery_time = datetime.datetime.strptime(dateMap.values()[0]+' 15:00:00', '%d-%m-%Y %H:%M:%S')promisedShipping = datetime.datetime.strptime(dateMap.keys()[0]+' 15:00:00', '%d-%m-%Y %H:%M:%S')order.expected_shipping_time = promisedShippingorder.promised_shipping_time = promisedShippingsession.commit()return Truedef update_source_detail_timestamp(id,lastUpdatedOn):detail = get_source_detail(id)detail.lastUpdatedOn = to_py_date(lastUpdatedOn)session.commit()return True