Subversion Repositories SmartDukaan

Rev

Rev 6409 | Rev 6591 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

'''
Created on 29-Mar-2010

@author: ashish
'''
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
from MySQLdb.constants.FLAG import AUTO_INCREMENT

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

def initialize(dbname='transaction', db_hostname="localhost", echoOn=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(True)


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 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 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(50))
    model_name = Field(String(50))
    color = Field(String(20))
    extra_info = Field(String(100))
    quantity = Field(Float)
    unit_price = Field(Float)
    unit_weight = Field(Float)
    total_price = Field(Float)
    transfer_price = Field(Float)
    total_weight = Field(Float)
    item_number = Field(String(50))
    serial_number = Field(String(50))
    dealText = Field(String(100))
    warranty_expiry_timestamp = Field(DateTime)
    order = ManyToOne("Order")
    vatRate = Field(Float)
    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)
    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")
    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")
    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))
    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'), 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)
    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")