Subversion Repositories SmartDukaan

Rev

Rev 5966 | Rev 6498 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5944 mandeep.dh 1
'''
2
Created on 22-Mar-2010
3
 
4
@author: ashish
5
'''
6
from elixir import metadata, setup_all
7
from elixir.entity import Entity
8
from elixir.fields import Field
9
from elixir.options import using_options, using_table_options
10
from elixir.relationships import OneToMany, ManyToOne
11
from sqlalchemy import create_engine
12
from sqlalchemy.types import Integer, String, DateTime, Float, Boolean, Enum
13
import datetime
14
 
15
class Vendor(Entity):
16
    id = Field(Integer, primary_key=True, autoincrement=True)
17
    name = Field(String(50))
18
    warehouses = OneToMany('Warehouse')
19
    using_options(shortnames=True)
20
    using_table_options(mysql_engine="InnoDB")
21
 
22
class Warehouse(Entity):
23
    id = Field(Integer, primary_key=True, autoincrement=True)
24
    displayName = Field(String(50))
25
    location = Field(String(200))
26
    status = Field(Integer)
27
    addedOn = Field(DateTime)
28
    lastCheckedOn = Field(DateTime)
29
    tinNumber = Field(String(50))
30
    pincode = Field(String(10))
31
    vendorString = Field(String(50))
32
    badInventory = OneToMany('BadInventorySnapshot')
33
    inventory = OneToMany('CurrentInventorySnapshot')
34
    inventoryHistory = OneToMany('ItemInventoryHistory')
35
    logisticsLocation = Field(Integer)
36
    vendor = ManyToOne('Vendor')
37
    billingType = Field(Integer)
38
    inventoryType = Field(Enum('GOOD', 'BAD', 'VIRTUAL'))
39
    warehouseType = Field(Enum('OURS', 'THIRD_PARTY'))
40
    shippingWarehouseId = Field(Integer)
41
    billingWarehouseId = Field(Integer)
42
    transferDelayInHours = Field(Integer)
43
    isAvailabilityMonitored = Field(Boolean)
44
    using_options(shortnames=True)
45
    using_table_options(mysql_engine="InnoDB")
46
 
47
    def __repr__(self):
48
        return "<warehouse>%s</warehouse>" %(self.location)
49
 
50
class VendorItemMapping(Entity):
51
    vendor = ManyToOne('Vendor', primary_key=True)
52
    item_key = Field(String(200), primary_key=True)
53
    item_id = Field(Integer)
54
    using_options(shortnames=True)
55
    using_table_options(mysql_engine="InnoDB")
56
 
57
class VendorItemPricing(Entity):
58
    vendor = ManyToOne('Vendor', primary_key=True)
59
    item_id = Field(Integer, primary_key=True)
60
    mop = Field(Float)
61
    dealerPrice = Field(Float)
62
    transfer_price = Field(Float)
63
    using_options(shortnames=True)
64
    using_table_options(mysql_engine="InnoDB")
65
 
66
class VendorItemProcurementDelay(Entity):
67
    vendor = ManyToOne('Vendor', primary_key=True)
68
    item_id = Field(Integer, primary_key=True)
69
    procurementDelay = Field(Integer)
70
    using_options(shortnames=True)
71
    using_table_options(mysql_engine="InnoDB")
72
 
73
class VendorHolidays(Entity):
74
    vendor = ManyToOne('Vendor', primary_key=True)
75
    holidayType = Field(Integer, primary_key=True, autoincrement=False)
76
    holidayValue = Field(Integer, primary_key=True, autoincrement=False)
77
    occasion = Field(String(100))
78
    using_options(shortnames=True)
79
    using_table_options(mysql_engine="InnoDB")
80
 
81
class CurrentInventorySnapshot(Entity):
82
    item_id = Field(Integer, primary_key=True)
83
    warehouse = ManyToOne("Warehouse", primary_key=True)
84
    availability = Field(Integer)
85
    reserved = Field(Integer)
86
    using_options(shortnames=True)
87
    using_table_options(mysql_engine="InnoDB")
5966 rajveer 88
 
89
class CurrentReservationSnapshot(Entity):
90
    item_id = Field(Integer, primary_key=True)
91
    warehouse_id = Field(Integer, primary_key=True)
92
    source_id = Field(Integer, primary_key=True)
93
    order_id = Field(Integer, primary_key=True)
94
    created_timestamp = Field(DateTime)
95
    promised_shipping_timestamp = Field(DateTime)
96
    reserved = Field(Integer)
97
    using_options(shortnames=True)
98
    using_table_options(mysql_engine="InnoDB")
99
 
5944 mandeep.dh 100
class BadInventorySnapshot(Entity):
101
    item_id = Field(Integer, primary_key=True)
102
    warehouse = ManyToOne("Warehouse", primary_key=True)
103
    availability = Field(Integer)
104
    using_options(shortnames=True)
105
    using_table_options(mysql_engine="InnoDB")
106
 
107
class SupplierInventorySnapshot(Entity):
108
    item_id = Field(Integer, primary_key=True)
109
    warehouse = ManyToOne("Warehouse", primary_key=True)
110
    availability = Field(Integer)
111
    using_options(shortnames=True)
112
    using_table_options(mysql_engine="InnoDB")
113
 
114
class ItemInventoryHistory(Entity):
115
    id = Field(Integer, primary_key=True, autoincrement = True)    
116
    timestamp = Field(DateTime, default=datetime.datetime.now())
117
    availability = Field(Integer)
118
    item_id = Field(Integer)
119
    warehouse = ManyToOne("Warehouse")
120
    using_options(shortnames=True)
121
    using_table_options(mysql_engine="InnoDB")
122
 
123
    def __repr__(self):
124
        pass
125
 
126
class MissedInventoryUpdate(Entity):
127
    id = Field(Integer, primary_key=True, autoincrement=True)
128
    itemKey = Field(String(200))
129
    quantity = Field(Integer)
130
    warehouseId = Field(Integer)
131
    isIgnored = Field(Boolean)
132
    timestamp = Field(DateTime)
133
    using_options(shortnames=True)
134
    using_table_options(mysql_engine="InnoDB")
135
 
136
class ItemAvailabilityCache(Entity):
137
    itemId = Field(Integer, primary_key=True, autoincrement=False)
5978 rajveer 138
    sourceId = Field(Integer, primary_key=True, autoincrement=False)
5944 mandeep.dh 139
    warehouseId = Field(Integer)
140
    expectedDelay = Field(Integer)
141
    billingWarehouseId = Field(Integer)
142
    sellingPrice = Field(Float) 
143
    totalAvailability = Field(Integer)
144
    using_options(shortnames=True)
145
    using_table_options(mysql_engine="InnoDB")
146
 
147
def initialize(dbname='inventory', db_hostname="localhost"):
148
    #metadata.bind = "sqlite:///inventory-new.sqlite" #need to read it from configserver.
149
    #metadata.bind = 'mysql://root:shop2020@localhost/inventory'
150
    engine = create_engine('mysql://root:shop2020@' + db_hostname + '/' + dbname, pool_recycle=7200)
151
    metadata.bind = engine
152
    metadata.bind.echo = True
153
    setup_all(True)
154
 
155
if __name__=="__main__":
156
    initialize()