Subversion Repositories SmartDukaan

Rev

Rev 23864 | Blame | Compare with Previous | Last modification | View Log | RSS feed

'''
Created on 29-Mar-2010

@author: ashish
'''
from MySQLdb.constants.FLAG import AUTO_INCREMENT
from elixir import metadata, setup_all
from elixir.entity import Entity
from elixir.fields import Field
from elixir.options import using_options, using_table_options
from elixir.relationships import ManyToOne, OneToMany
from sqlalchemy.engine import create_engine
from sqlalchemy.types import Integer, String, Float, DateTime, Boolean, Enum, \
    Numeric, BigInteger, LargeBinary, Date
import datetime

#===============================================================================
# Different entities in the model
#===============================================================================

def initialize(dbname='transaction', db_hostname="localhost", echoOn=True, setup=True):
    #metadata.bind = "sqlite:///Transactionsnew.sqlite"
    #metadata.bind = 'mysql://root:shop2020@localhost/transaction'
    engine = create_engine('mysql://root:shop2020@' + db_hostname + '/' + dbname, pool_recycle=7200)
    metadata.bind = engine
    metadata.bind.echo = echoOn
    setup_all(setup)


if __name__=="__main__":
    initialize()

class InvoiceIDGenerator(Entity):
    id = Field(Integer)
    orderType = Field(Integer, primary_key = True)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")   
    
class InvoiceCounterGenerator(Entity):
    id = Field(Integer)
    companyId = Field(Integer, primary_key = True)
    orderType = Field(Integer, primary_key = True)
    stateId = Field(Integer, primary_key = True)
    prefix = Field(String(20))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class RechargeVoucherTracker(Entity):
    order = ManyToOne("Order")
    voucherType = Field(Integer)
    amount = Field(Integer)
    voucherIssued = Field(Boolean)
    voucherCode = Field(String(30))
    issuedOn = Field(DateTime)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class DtrBatchCreditTracker(Entity):
    id=Field(Integer, primary_key = True)
    amount = Field(Integer)
    creditedOn = Field(DateTime)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class PendingRechargeCommissions(Entity):
    user_id=Field(Integer, primary_key=True)
    approvedAmountInPaise = Field(Integer)
    lastUpdated = Field(DateTime)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

    def __repr__(self):
        return "{0} {1} {2} {3}".format(self.brand or "", self.model_name or "", self.model_number or "", self.color or "")

class Line_Item_Imei(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    line_item_id = Field(Integer)
    serial_number = Field(String(16))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class LineItem(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    item_id = Field(Integer)
    productGroup = Field(String(100))
    brand = Field(String(100))
    model_number = Field(String(100))
    model_name = Field(String(100))
    color = Field(String(20))
    extra_info = Field(String(100))
    quantity = Field(Float)
    mrp = Field(Float)
    unit_price = Field(Float)
    unit_weight = Field(Float)
    total_price = Field(Float)
    transfer_price = Field(Float)
    nlc = Field(Float)
    total_weight = Field(Float)
    item_number = Field(String(50))
    serial_number = Field(String(8192)) 
    dealText = Field(String(100))
    warranty_expiry_timestamp = Field(DateTime)
    order = ManyToOne("Order")
    vatRate = Field(Float)
    igstRate = Field(Float)
    sgstRate = Field(Float)
    cgstRate = Field(Float)
    hsnCode = Field(String(12))
    logisticsCost = Field(Float, default=0, server_default="0")
    codCollectionCharges = Field(Float, default=0, server_default="0")
    returnQty = Field(Float, default=0, server_default="0")
    damaged_expiry_timestamp = Field(DateTime)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
    def __repr__(self):
        return "{0} {1} {2} {3}".format(self.brand or "", self.model_name or "", self.model_number or "", self.color or "")
    
class Order(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    warehouse_id = Field(Integer)
    logistics_provider_id = Field(Integer)
    airwaybill_no = Field(String(50))
    tracking_id = Field(String(50))
    expected_delivery_time = Field(DateTime)
    promised_delivery_time = Field(DateTime)
    expected_shipping_time = Field(DateTime)
    promised_shipping_time = Field(DateTime)
    courier_delivery_time = Field(DateTime)
    customer_id = Field(Integer)
    customer_name = Field(String(50))
    customer_mobilenumber = Field(String(20))
    customer_pincode = Field(String(10))
    customer_address1 = Field(String(100))
    customer_address2 = Field(String(100))
    customer_city = Field(String(100))
    customer_state = Field(String(100))
    customer_email = Field(String(50))
    status = Field(Integer)
    statusDescription = Field(String(50))
    total_amount = Field(Float)
    gvAmount = Field(Float)
    total_weight = Field(Float)
    invoice_number = Field(String(30))
    billed_by = Field(String(30))
    created_timestamp = Field(DateTime)
    accepted_timestamp = Field(DateTime)
    billing_timestamp = Field(DateTime)
    shipping_timestamp = Field(DateTime)
    pickup_timestamp = Field(DateTime)
    delivery_timestamp = Field(DateTime)
    outofstock_timestamp = Field(DateTime)
    lineitems = OneToMany("LineItem")
    transaction = ManyToOne("Transaction")
    insuranceDetails = OneToMany("InsuranceDetailForOrder")
    dataInsuranceDetails = OneToMany("DataInsuranceDetailForOrder")
    jacket_number = Field(Integer)
    receiver = Field(String(50))
    batchNo = Field(Integer)
    serialNo = Field(Integer)
    doaFlag = Field(Boolean)
    pickupRequestNo = Field(String(20))
    doa_auth_timestamp = Field(DateTime)
    doa_pickup_timestamp = Field(DateTime)
    received_return_timestamp = Field(DateTime)
    reship_timestamp = Field(DateTime)
    refund_timestamp = Field(DateTime)
    new_order_id = Field(Integer)
    purchase_order_id = Field(Integer)
    cod = Field(Boolean)
    refunded_by = Field(String(30))
    refund_reason = Field(String(256))
    verification_timestamp = Field(DateTime)
    delay_reason = Field(Enum('INVENTORY_LOW_PHASED_OUT', 'INVENTORY_LOW_COLOR_NOT_AVAILABLE',\
                              'INVENTORY_LOW_REVERSAL_NOT_ON_TIME', 'INVENTORY_LOW_PRODUCT_NOT_SEALED',\
                              'COURIER_DELAY_NOT_DELIVERED_TO_COURIER_ON_TIME', 'COURIER_DELAY_DID_NOT_CONNECT',\
                              'COURIER_DELAY_CUSTOMER_NOT_AVAILABLE', 'COURIER_DELAY_INCORRECT_ADDRESS',\
                              'COURIER_DELAY_OCTROI_DELAY', 'COURIER_DELAY_FORCES_OF_NATURE',\
                              'COD_VERIFICATION_DELAY', 'PAYMENT_FLAGGED', 'OTHERS'))
    cod_reconciliation_timestamp = Field(DateTime)
    previousStatus = Field(Integer)
    vendorId = Field(Integer)
    delayReasonText= Field(String(250))
    doa_logistics_provider_id = Field(Integer)
    local_connected_timestamp = Field(DateTime)
    reached_destination_timestamp = Field(DateTime)
    first_dlvyatmp_timestamp = Field(DateTime)
    orderInventory = OneToMany("OrderInventory")
    vendor_paid = Field(Boolean, default=0, server_default="0")
    originalOrderId = Field(Integer)
    fulfilmentWarehouseId = Field(Integer)
    orderType = Field(Integer)
    pickupStoreId = Field(Integer, default=0, server_default="0")
    otg = Field(Boolean, default=0, server_default="0")
    insurer = Field(Integer, default=0, server_default="0")
    insuranceAmount = Field(Float, default=0, server_default="0")
    freebieItemId = Field(Integer, default=0, server_default="0")
    source = Field(Integer, default=1, server_default="1")
    storeId = Field(Integer, default=0, server_default="0")
    advanceAmount = Field(Float, default=0, server_default="0")
    productCondition = Field(Integer, default=0, server_default="0")
    dataProtectionInsurer = Field(Integer, default=0, server_default="0")
    dataProtectionAmount = Field(Float, default=0, server_default="0")
    taxType = Field(Integer, default=0, server_default="0")
    logisticsTransactionId = Field(String(100))
    shippingCost = Field(Float, default=0, server_default="0")
    shippingRefund = Field(Float, default=0, server_default="0")
    codCharges = Field(Float, default=0, server_default="0")
    seller_id = Field(Integer)
    warehouse_address_id = Field(Integer)
    wallet_amount = Field(Float, default=0, server_default="0")
    net_payable_amount = Field(Float) 
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class CodVerificationAgent(Entity):
    orderId = Field(Integer, primary_key=True, autoincrement=True)
    verificationAgent = Field(String(200))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class Transaction(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    createdOn = Field(DateTime)
    status = Field(Integer)
    status_message = Field(String(100))
    customer_id = Field(Integer)
    shopping_cart_id = Field(Integer)
    session_source = Field(String(100))
    session_start_time = Field(DateTime)
    first_source = Field(String(100))
    first_source_start_time = Field(DateTime)
    orders = OneToMany("Order")
    coupon_code = Field(String(20))
    totalShippingCost = Field(Float, default=0, server_default="0")
    totalCodCharges = Field(Float, default=0, server_default="0")
    payment_option = Field(Integer)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class Alert(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    type = Field(Integer)
    status = Field(Integer)
    timestamp = Field(DateTime)
    description = Field(String(100))
    warehouseId = Field(Integer)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class BatchNoGenerator(Entity):
    id=Field(Integer, primary_key=True)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class TransactionRequiringExtraProcessing(Entity):
    transaction_id = Field(Integer, primary_key=True, autoincrement=False)
    category = Field(Enum('COD_VERIFICATION', 'DELAYED_DELIVERY', 'PAYMENT_FLAGGED', 'RECHARGE_UNKNOWN'), primary_key=True, autoincrement=False)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class OrderInventory(Entity):
    order = ManyToOne("Order", primary_key=True)
    itemId = Field(Integer)
    timestamp = Field(DateTime)
    hotspotAction = Field(Integer)
    estimate = Field(Integer)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class EBSSettlementSummary(Entity):
    settlementId = Field(Integer, primary_key = True)
    settlementDate = Field(DateTime)
    transactionDateFrom = Field(DateTime)
    transactionDateTo = Field(DateTime)
    amount = Field(Numeric(precision=11, scale=3, asdecimal=False))
    detailsUploaded = Field(Boolean)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class PaymentSettlement(Entity):
    referenceId = Field(Integer)    #PaymentID in case of prepaid & Order Id in case of COD
    originalOrderId = Field(Integer)    #originalOrderId in case of prepaid is NULL & Order Id of original Order or Order Id in case of COD
    paymentGatewayId = Field(Integer)
    settlementDate = Field(DateTime)
    serviceTax = Field(Numeric(precision=11, scale=3, asdecimal=False))
    otherCharges = Field(Numeric(precision=11, scale=3, asdecimal=False))
    netCollection = Field(Numeric(precision=11, scale=3, asdecimal=False))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class Attribute(Entity):
    orderId = Field(Integer)
    name = Field(String(100))
    value = Field(String(100))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    

class EmiScheme(Entity):
    id  = Field(Integer, primary_key=True)
    gatewayId  = Field(Integer)
    bankId = Field(Integer)
    tenure = Field(Integer)
    bankName = Field(String(256))
    tenureDescription = Field(String(256))
    minAmount = Field(Integer)
    chargeType = Field(Integer)
    chargeValue = Field(Float)
    interestRate = Field(Float)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class MiscCharges(Entity):
    transaction = ManyToOne("Transaction", primary_key=True)
    chargeType = Field(Integer, primary_key=True, autoincrement=False)
    chargeAmount = Field(Float)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class BlockedIpRange(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    start = Field(BigInteger)
    end = Field(BigInteger)
    expiredOn = Field(DateTime)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class DeniedIpAddress(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    ip = Field(String(256))
    deniedOn = Field(DateTime)
    rechargeType = Field(Integer)
    deviceNumber = Field(String(128))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class InsuranceDetailForOrder(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    dob = Field(String(64))
    guardianName = Field(String(255))
    startDate = Field(DateTime)
    expiryDate = Field(DateTime)
    isDeclared = Field(Boolean, default=0)
    order = ManyToOne("Order")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
    def __init__(self):
        self.isDeclared = 0
    
class DataInsuranceDetailForOrder(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    startDate = Field(DateTime)
    expiryDate = Field(DateTime)
    isDeclared = Field(Boolean, default=0, server_default="0")
    order = ManyToOne("Order")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class DocumentStore(Entity):
    docType = Field(Integer, primary_key=True, autoincrement=False)
    docSource = Field(Integer, primary_key=True, autoincrement=False)
    document  = Field(LargeBinary)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class Company(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    name = Field(String(255))
    Address = Field(String(255))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
    
class Organisation(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    name = Field(String(255))
    address = Field(String(255))
    type = Field(Enum('company'), default='company')
    registered_id = Field(String(127))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class Seller(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    label=Field(String(31), unique=True)
    organisation_id = Field(Integer)
    state_id = Field(Integer)
    tin = Field(String(15))
    gstin = Field(String(16))
    address = Field(String(255))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class WarehouseAddressMapping(Entity):
    warehouse_id = Field(Integer)
    address_id = Field(Integer)
    created = Field(DateTime, default=datetime.datetime.now)
    updated = Field(DateTime)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class WarehouseAddressMaster(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    address = Field(String(255))
    pin = Field(String(6))
    state_id = Field(Integer)
    created = Field(DateTime, default=datetime.datetime.now)
    contact_person = Field(String(127))
    contact_number = Field(String(10))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class SellerWarehouse(Entity):
    id = Field(Integer, default=0)
    challan_id = Field(Integer, default=0)
    seller_id = Field(Integer, primary_key=True)
    warehouse_id = Field(Integer, primary_key=True)
    orderType = Field(Integer, primary_key = True)
    prefix = Field(String(7))
    created_on = Field(DateTime)
    is_active = Field(Boolean)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
     

class WalletForCompany(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    companyId = Field(Integer)
    amount = Field(Integer)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class WalletHistoryForCompany(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    walletId = Field(Integer)
    amount = Field(Integer)
    transactionTime = Field(DateTime)
    openingBal = Field(Integer)
    closingBal = Field(Integer)
    referenceNumber = Field(Integer)
    description = Field(String(255))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class RechargeTransaction(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    storeId = Field(Integer)
    amount = Field(Integer)
    transactionTime = Field(DateTime)
    responseTime = Field(DateTime)
    description = Field(String(255))
    spiceTID = Field(String(255))
    aggTID = Field(String(255))
    providerTID = Field(String(255))
    plan = Field(String(255))
    deviceNum = Field(String(64))
    deviceType = Field(Integer)
    isFrc = Field(Boolean)
    email = Field(String(255))
    discount = Field(Integer)
    paymentAmount = Field(Integer)
    payMethod = Field(Integer, default=0, server_default="0")
    status = Field(Integer)
    invoiceNumber = Field(Integer)
    circleId = Field(Integer)
    operatorId = Field(Integer)
    name = Field(String(255))
    simNum = Field(String(255))
    cafNum = Field(String(255))
    ipAddress = Field(String(255))
    alternateNumber = Field(String(255))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class OperatorSeries(Entity):
    series = Field(Integer, primary_key=True, autoincrement=False)
    operatorId = Field(Integer)
    circleId = Field(Integer)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
        
class FRC(Entity):
    id = Field(Integer, primary_key=True)
    operatorId = Field(Integer)
    circleId = Field(Integer)
    denomination = Field(Integer)
    maxDiscount = Field(Integer)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class HotspotStore(Entity):
    id = Field(Integer, primary_key=True)
    hotspotId = Field(String(3))
    companyId = Field(Integer)
    name = Field(String(100))
    city = Field(String(100))
    collectedAmount = Field(Integer)
    availableLimit = Field(Integer)
    creditLimit = Field(Integer)
    salt = Field(String(100))
    password = Field(String(100))
    isActive = Field(Boolean)
    circleId = Field(Integer)
    email = Field(String(100))
    line1 = Field(String(100))
    line2 = Field(String(100))
    state = Field(String(100))
    pin = Field(String(10))
    phone = Field(String(20))
    tin = Field(String(100))
    approvalEmail = Field(String(255))
    clusterEmail = Field(String(100))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class RechargeCollection(Entity):
    hotspotId = Field(String(3), primary_key=True, autoincrement=False)
    reconDate = Field(Integer, primary_key=True, autoincrement=False)
    cash = Field(Integer)
    hdfc = Field(Integer)
    grossAmount = Field(Integer)
    discount = Field(Integer)
    netCollection = Field(Integer)
    addedAt = Field(DateTime)
    pushedAt = Field(DateTime)
    pushedToOcr = Field(Boolean)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class StoreOrderCollection(Entity):
    hotspotId = Field(String(3), primary_key=True, autoincrement=False)
    orderId = Field(Integer, primary_key=True, autoincrement=False)
    collectionType = Field(String(255), primary_key=True, autoincrement=False)
    productName = Field(String(255))
    advanceAmount = Field(Integer)
    cash = Field(Integer)
    card = Field(Integer)
    addedAt = Field(DateTime)
    pushedAt = Field(DateTime)
    pushedToOcr = Field(Boolean)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class SourceDetail(Entity):
    id = Field(Integer, primary_key=True, autoincrement=False)
    name = Field(String(255))
    email = Field(String(255))
    tinNumber = Field(String(255))
    lastUpdatedOn = Field(DateTime)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class AmazonOrder(Entity):
    orderId = Field(Integer, primary_key=True, autoincrement=False)
    amazonOrderCode = Field(String(255))
    amazonOrderItemCode = Field(String(255))
    transactionId = Field(Integer)
    item_id = Field(Integer)
    status = Field(String(50))
    purchaseDateOnAmazon = Field(DateTime)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class StoreOrderDetail(Entity):
    orderId = Field(Integer, primary_key=True, autoincrement=False)
    storeId = Field(Integer, primary_key=True, autoincrement=False)
    advanceAmount = Field(Float)
    cashAmount = Field(Float)
    cardAmount = Field(Float)
    payStatus = Field(Integer)
    edcBank = Field(String(100))
    cashRefundAmount = Field(Float)
    cardRefundAmount = Field(Float)
    approvalCode = Field(String(100))
    cardType = Field(String(100))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class EdcBank(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    name = Field(String(255))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class HotspotServiceMatrix(Entity): 
    storeId = Field(Integer, primary_key=True)
    hotspotId = Field(String(3))
    rechargeService = Field(Boolean, default=0, server_default="0")
    storeWebsiteService = Field(Boolean, default=0, server_default="0")
    pickupFromStoreService = Field(Boolean, default=0, server_default="0")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class  EbayOrder(Entity):
    orderId = Field(Integer, primary_key=True, autoincrement=False)
    salesRecordNumber = Field(Integer)
    paisaPayId = Field(String(32))
    ebayListingId = Field(String(32))
    subsidyAmount = Field(Float)
    ebayTxnDate = Field(DateTime)
    transactionId = Field(String(16))
    listingName = Field(String(128))
    listingPrice = Field(Float)
    bluedartPaisaPayRef = Field(String(16))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class  SnapdealOrder(Entity):
    orderId = Field(Integer)
    subOrderId = Field(String(32), primary_key=True, autoincrement=False)
    referenceCode = Field(String(32),primary_key=True, autoincrement=False)
    snapdealTxnDate = Field(DateTime)
    productName = Field(String(128))
    listingPrice = Field(Float)
    maxNlc = Field(Float)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class AmazonFbaSalesSnapshot(Entity):
    dateOfSale = Field(Date, primary_key=True)
    item_id = Field(Integer, primary_key=True,autoincrement=False)
    totalOrderCount = Field(Integer)
    amazonFbaInventory = Field(Integer)
    isOutOfStock = Field(Boolean)
    salePrice = Field(Float)
    ourPrice = Field(Float)
    minFbaPrice = Field(Float)
    minMfnPrice = Field(Float)
    totalSale = Field(Numeric(precision=11, scale=3, asdecimal=False))
    promotionSale =  Field(Numeric(precision=11, scale=3, asdecimal=False))
    promotionOrderCount = Field(Integer)
    ourPriceSnapshotDate  =  Field(DateTime)
    salePriceSnapshotDate  = Field(DateTime)
    minMfnPriceSnapshotDate = Field(DateTime)
    minFbaPriceSnapshotDate = Field(DateTime)
    fcLocation = Field(Integer, primary_key=True,autoincrement=False)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class SpiceTransactionHistory(Entity):
    orderId = Field(Integer, primary_key=True, autoincrement=False)
    spiceTID = Field(String(32))
    reponseCode = Field(String(32))
    rechargeTime = Field(DateTime)
    reconciliationTime = Field(DateTime)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class FlipkartOrder(Entity):   
    orderId = Field(Integer)
    flipkartSubOrderId = Field(String(30),primary_key=True, autoincrement=False)
    flipkartOrderId = Field(String(30),primary_key=True, autoincrement=False)
    flipkartTxnDate = Field(DateTime)
    shippingPrice = Field(Float)
    octroiFee = Field(Float)
    emiFee = Field(Float)
    maxNlc = Field(Float)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class AmazonFbaOrderReturns(Entity):
    amazonOrderId = Field(String(30),primary_key=True, autoincrement=False)
    insertionTimestamp = Field(DateTime, primary_key=True, autoincrement=False)
    sku = Field(Integer, primary_key=True, autoincrement=False)
    creationTimestamp = Field(DateTime)    
    shippedQuantity = Field(Integer)
    sellableReturnQuantity = Field(Integer)
    nonSellableReturnQuantity = Field(Integer)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class MobileActivationRecord(Entity):
    orderId = Field(Integer)
    deviceNumber = Field(String(64))
    serialNumber = Field(String(20))
    circle = Field(String(100))
    operator = Field(String(100))
    activationTime = Field(DateTime)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class FlipkartAdvantageOrder(Entity):
    fkOrderId = Field(String(30),primary_key=True, autoincrement=False)
    fkOrderItemId = Field(String(30),primary_key=True, autoincrement=False)
    sku = Field(Integer)
    creationTimestamp = Field(DateTime)
    customerName = Field(String(50))
    customerAddress = Field(String(500))
    pincode = Field(String(10))
    customerCity = Field(String(30))
    customerState = Field(String(30))
    customerPhone = Field(String(30))
    status = Field(String(20))
    quantity = Field(Integer)
    totalPrice = Field(Float)
    listPrice = Field(Float)
    modifiedDate = Field(DateTime)
    listingId = Field(String(50))
    cancelReason = Field(String(100))
    returnReason = Field(String(100))
    freebieItemId = Field(String(20))
    productTitle = Field(String(200))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class FlipkartFaSalesSnapshot(Entity):
    dateOfSale = Field(Date, primary_key=True)
    item_id = Field(Integer, primary_key=True,autoincrement=False)
    totalOrderCount = Field(Integer)
    isOutOfStock = Field(Boolean)
    totalSale = Field(Numeric(precision=11, scale=3, asdecimal=False))
    ourPrice = Field(Float)
    fcLocation = Field(Integer, primary_key=True,autoincrement=False)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class TransactionShipmentSequence(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    transactionId = Field(Integer)
    createdTimestamp = Field(DateTime)
    sequence = Field(Integer, default=0)
    invoiceFormat = Field(Integer, default=1)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class Creditor(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    name = Field(String(64))
    ticket_size = Field(Float)
    credit_due_days = Field(Integer)
    active = Field(Boolean)
    updated = Field(DateTime, onupdate=datetime.datetime.now)
    created = Field(DateTime,default = datetime.datetime.now)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class UserSanction(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    user_id = Field(Integer)
    creditor_id = Field(Integer)
    user_ref_id = Field(String(24))
    credit_limit = Field(Float)
    credit_blocked = Field(Float)
    loan = Field(Float)
    active = Field(Boolean)
    updated = Field(DateTime, onupdate=datetime.datetime.now)
    created = Field(DateTime,default = datetime.datetime.now)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class CreditHistory(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    user_id = Field(Integer)
    creditor_id = Field(Integer)
    payment_id = Field(Integer)
    amount = Field(Float)
    credit_type = Field(Enum('BLOCKED', 'BLOCKED_REVERSED', 'LOAN',  'LOAN_CANCELLED', 'PAID', 'DEFAULTED'))
    shipping_id = Field(String(30))
    created = Field(DateTime,default = datetime.datetime.now)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class LoanHistory(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    user_id = Field(Integer)
    creditor_id = Field(Integer)
    payment_id = Field(Integer)
    amount = Field(Float)
    credit_type = Field(Enum('BLOCKED', 'BLOCKED_REVERSED', 'LOAN',  'LOAN_CANCELLED', 'PAID', 'DEFAULTED', 'CORRECTION'))
    loan_id = Field(String(30))
    created = Field(DateTime,default = datetime.datetime.now)
    updated = Field(DateTime)
    due_date = Field(DateTime)
    value_date = Field(DateTime)
    invoiceNumber = Field(String(30))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class HsOrder(Entity):
    orderId = Field(Integer, primary_key=True, autoincrement=False)
    hsOrderNo = Field(String(32))
    hsSubOrderNo = Field(String(32))
    catalogueName = Field(String(50))
    hsOrderDate = Field(DateTime)
    hsProductId = Field(String(32))
    hsItemId = Field(String(32))
    sellerSku = Field(String(32))
    paymentMode = Field(String(50))
    courierName = Field(String(50))
    slaDays = Field(Integer)
    shippingName = Field(String(50))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class PendingStoreOrder(Entity):
    orderId = Field(Integer, primary_key=True, autoincrement=False)
    hsOrderNo = Field(String(32))
    hsSubOrderNo = Field(String(32))
    catalogueName = Field(String(50))
    hsOrderDate = Field(DateTime)
    hsProductId = Field(String(32))
    hsItemId = Field(String(32))
    sellerSku = Field(String(32))
    paymentMode = Field(String(50))
    courierName = Field(String(50))
    slaDays = Field(Integer)
    shippingName = Field(String(50))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class ReturnPickupRequest(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    logisticsProviderId = Field(Integer)
    pickupRequestNo = Field(String(50))
    confirmedAt = Field(DateTime)
    promised_pickup_timestamp = Field(DateTime)
    pickedUpAt = Field(DateTime)
    pickupStatus = Field(Enum('PENDING','PICKUP_REQUESTED','PICKUP_CONFIRMED','PICKUP_SCHEDULED','PICKUP_IN_TRANSIT','PICKUP_RECEIVED'))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class ReturnOrderInfo(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    returnTransaction = ManyToOne("ReturnTransaction")
    masterOrderId = Field(String(100))
    orderId = Field(Integer)
    lineItemId = Field(Integer)
    logisticsRequestId = Field(Integer)
    returnQuantity = Field(Integer)
    receivedQuantity = Field(Integer)
    createdAt = Field(DateTime)
    processedAt = Field(DateTime)
    returnStatus = Field(String(256))
    reshippedAt = Field(DateTime)
    receivedAt = Field(DateTime)
    refundReason = Field(String(256))
    refundedBy = Field(String(256))
    refundedAt = Field(DateTime)
    warehouse_id = Field(Integer)
    refundAmount = Field(Float)
    refundType = Field(Integer, default=0, server_default="0")
    refundDescription = Field(String(256))
    returnPickupType = Field(Integer, default=0, server_default="0")
    shippingType = Field(Integer, default=0, server_default="0")
    replacementOrderId = Field(Integer)
    receivedReturnType = Field(Integer)
    freebieItemId = Field(Integer, default=0, server_default="0")
    returnAction = Field(Integer)
    returnTxnResolutionStatus = Field(Enum('PENDING','AWAITING_PICKUP','QUALITY_CHECK','REPLACEMENT_DONE'\
                              'REPLACEMENT_ORDER_CREATED','REFUND_IN_PROCESS','REFUND_DONE','CLOSED'))
    lineitem = ManyToOne("LineItem", field=lineItemId)
    returnPickUpRequest = ManyToOne("ReturnPickupRequest", field=logisticsRequestId)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class ReturnTransaction(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    status = Field(Enum('INITIATED','AUTHORIZED','INPROCESS','REJECTED','PROCESSED','COMPLETED','CLOSED'))
    customer_email = Field(String(50))
    customer_name = Field(String(50))
    customer_id = Field(Integer)
    address_id = Field(Integer)
    ticketId = Field(Integer)
    createdAt = Field(DateTime)
    processedAt = Field(DateTime)
    authorizedAt = Field(DateTime)
    closedAt = Field(DateTime)
    customerAddress = Field(String(512))
    pincode = Field(String(10))
    customerCity = Field(String(100))
    customerState = Field(String(50))
    customerPhone = Field(String(50))
    returnOrders = OneToMany("ReturnOrderInfo")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class ShipmentLogisticsCostDetail(Entity):
    logisticsTransactionId = Field(String(100), primary_key=True)
    airwayBillNo = Field(String(50), primary_key=True)
    shipmentAmount = Field(Float, default=0, server_default="0")
    shipmentWeight = Field(Float, default=0, server_default="0")
    shipmentLogsiticsCost = Field(Float, default=0, server_default="0")
    shipmentCodCollectionCharges = Field(Float, default=0, server_default="0")
    createdAt = Field(DateTime,default = datetime.datetime.now)
    updatedAt = Field(DateTime)
    packageDimensions = Field(String(20))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class CodCourierPaymentRemittance(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    provider_id = Field(Integer)
    airwayBillNo = Field(String(50))
    collectionReference = Field(String(50))
    amount = Field(Float)
    settledAt = Field(DateTime)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")


class Price_Drop_IMEI(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    price_drop = ManyToOne("Price_Drop")
    imei = Field(String(16))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class Price_Drop(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    item_id = Field(Integer)
    amount = Field(Float)
    affected_on = Field(Date)
    imeis = OneToMany("Price_Drop_IMEI")
    created_on = Field(DateTime)
    credit_note_number = Field(String(32))
    credit_note_date = Field(Date)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
    
class PMSA(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    name = Field(String(256))
    phone = Field(String(10))
    emailId = Field(String(50))
    address = Field(String(256))
    state = Field(String(256))
    level = Field(String(10))
    l1_id = Field(Integer)
    l2_id = Field(Integer)
    activated = Field(Boolean)
    pin = Field(String(6))
    code = Field(String(12))
    createdAt = Field(DateTime,default = datetime.datetime.now)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class PMSA_Agents(Entity):
    userId = Field(Integer, primary_key=True, autoincrement=False)
    pmsa_id = Field(Integer)
    createdAt = Field(DateTime,default = datetime.datetime.now)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class AdvancePayments(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    userId = Field(Integer)
    amount = Field(Integer)
    cash_back = Field(Integer)
    cash_back_type = Field(String(20))
    cash_back_amount = Field(Integer)
    createdAt = Field(DateTime,default = datetime.datetime.now)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")