Subversion Repositories SmartDukaan

Rev

Rev 358 | Rev 494 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 358 Rev 483
Line 2... Line 2...
2
Created on 29-Mar-2010
2
Created on 29-Mar-2010
3
 
3
 
4
@author: ashish
4
@author: ashish
5
'''
5
'''
6
from shop2020.model.v1.order.impl.DataService import Transaction, LineItem,\
6
from shop2020.model.v1.order.impl.DataService import Transaction, LineItem,\
7
    AdditionalInfo, Payment, Shipment, TransactionTrail, Billing, ItemInfo,\
-
 
8
    Alerts, ExtraItemInfo
7
    Payment, Alerts, Order
9
from shop2020.thriftpy.model.v1.order.ttypes import Transaction as T_Transaction,\
8
from shop2020.thriftpy.model.v1.order.ttypes import Transaction as T_Transaction,\
10
    TransactionServiceException
9
    TransactionServiceException
11
import datetime
10
import datetime
12
from shop2020.utils.OrderStatus import status_transaction_init,\
11
from shop2020.utils.OrderStatus import status_transaction_init, get_c_status
13
    status_shipment_shipped, status_shipment_delivered, get_c_status
-
 
14
from elixir import *
12
from elixir import *
15
from shop2020.utils.Utils import to_py_date
13
from shop2020.utils.Utils import to_py_date
16
from sqlalchemy.sql.expression import and_
14
from sqlalchemy.sql.expression import and_
-
 
15
from shop2020.model.v1 import order
17
 
16
 
18
 
17
 
-
 
18
 
-
 
19
def get_new_transaction():
-
 
20
    transaction = Transaction()
-
 
21
    transaction.createdOn = datetime.datetime.now()
-
 
22
    transaction.status = status_transaction_init 
-
 
23
    transaction.status_message = "New transaction"
-
 
24
    
-
 
25
    return transaction
-
 
26
 
-
 
27
'''
-
 
28
    customer_id = Field(Integer)
-
 
29
    shopping_cart_id = Field(Integer)
-
 
30
    payments = OneToMany("Payment")
-
 
31
    orders = OneToMany("Order")
-
 
32
'''
-
 
33
 
-
 
34
def create_order(t_order):
-
 
35
    order = Order()
-
 
36
    if t_order.warehouse_id:
-
 
37
        order.warehouse_id = t_order.warehouse_id
-
 
38
    if order.logistics_provider_id:    
-
 
39
        order.logistics_provider_id = t_order.logistics_provider_id
-
 
40
        order.airwaybill_no = t_order.airwaybill_no
-
 
41
        order.tracking_id = t_order.tracking_id
-
 
42
    if t_order.expected_delivery_time:    
-
 
43
        order.expected_delivery_time = to_py_date(t_order.expected_delivery_time)
-
 
44
    if t_order.customer_id:    
-
 
45
        order.customer_id = t_order.customer_id
-
 
46
        order.customer_name = t_order.customer_name
-
 
47
        order.customer_mobilenumber = t_order.customer_mobilenumber
-
 
48
        order.customer_pincode = t_order.customer_pincode
-
 
49
        order.customer_address = t_order.customer_address
-
 
50
        order.customer_email = t_order.customer_email
-
 
51
    #new status and status description to be added    
-
 
52
    order.status = t_order.status 
-
 
53
    order.statusDescription = t_order.statusDescription
-
 
54
    order.total_amount = t_order.total_amount
-
 
55
    order.total_weight = t_order.total_weight
-
 
56
    if t_order.created_timestamp:
-
 
57
        order.created_timestamp = to_py_date(t_order.created_timestamp)
-
 
58
    else:
-
 
59
        order.created_timestamp = datetime.datetime.now()    
-
 
60
    #these fields will not be populated in initial
-
 
61
    """
-
 
62
    order.invoice_number = order.invoice_number
-
 
63
    order.billed_by = order.billed_by
-
 
64
    order.accepted_timestamp = order.accepted_timestamp
-
 
65
    order.billing_timestamp = order.billing_timestamp
-
 
66
    order.shipping_timestamp = order.shipping_timestamp
-
 
67
    order.delivery_timestamp = order.delivery_timestamp
-
 
68
    """
-
 
69
    return order
-
 
70
    
-
 
71
def create_transaction(t_transaction):
-
 
72
    t_orders = t_transaction.orders
-
 
73
    if not t_orders:
-
 
74
        raise TransactionServiceException(101, "Orders missing from the transaction")
-
 
75
    transaction = get_new_transaction()
-
 
76
    transaction.customer_id = t_transaction.customer_id 
-
 
77
    transaction.shopping_cart_id = t_transaction.shoppingCartid
-
 
78
 
-
 
79
    for t_order in t_orders:
-
 
80
        order = create_order(t_order)
-
 
81
        order.transaction = transaction 
-
 
82
        for line_item in t_order.lineitems:
-
 
83
            litem = LineItem()
-
 
84
            litem.sku_id = line_item.sku_id
-
 
85
            litem.brand = line_item.brand
-
 
86
            if line_item.model_number:
-
 
87
                litem.model_number = line_item.model_number
-
 
88
            if line_item.model_name:    
-
 
89
                litem.model_name = line_item.model_name
-
 
90
            if line_item.extra_info:
-
 
91
                litem.extra_info = line_item.extra_info
-
 
92
            litem.quantity = line_item.quantity
-
 
93
            litem.unit_price = line_item.unit_price
-
 
94
            litem.unit_weight = line_item.unit_weight
-
 
95
            litem.total_price = line_item.total_price
-
 
96
            litem.total_weight = line_item.total_weight
-
 
97
            """
-
 
98
            if line_item.addedOn:
-
 
99
                litem.added_on = to_py_date(line_item.addedOn)
-
 
100
            else:
-
 
101
                litem.added_on = datetime.datetime.now()
-
 
102
            """
-
 
103
            litem.order = order
-
 
104
            
-
 
105
    #add payment info
-
 
106
    #transaction.payments=[]
-
 
107
    if t_transaction.paymentInfo:
-
 
108
        if not t_transaction.paymentInfo.payments:
-
 
109
            raise TransactionServiceException(108, "no payments found")
-
 
110
        
-
 
111
        for k,v in t_transaction.paymentInfo.payments.iteritems():
-
 
112
            payment = Payment()
-
 
113
            payment.merchant_tx_id = v.merchant_tx_id
-
 
114
            payment.bank_tx_id = v.bank_tx_id
-
 
115
            payment.mode = v.mode
-
 
116
            payment.amount = v.amount
-
 
117
            payment.payment_id = v.id
-
 
118
            payment.status = v.status
-
 
119
            payment.status_message = v.description
-
 
120
            payment.start_time = to_py_date(v.submissionTimestamp)
-
 
121
            payment.finish_time = to_py_date(v.completionTimestamp)
-
 
122
            transaction.payments.append(payment)
-
 
123
    session.commit()
-
 
124
    return transaction.id
-
 
125
 
-
 
126
def get_transaction(transaction_id):
-
 
127
    transaction = Transaction.get_by(id=transaction_id)
-
 
128
    if not transaction:
-
 
129
        raise TransactionServiceException(108, "no such transaction")
-
 
130
    
-
 
131
    return transaction
-
 
132
 
-
 
133
def get_transactions_for_customer(customer_id, from_date, to_date, status):
-
 
134
    if not customer_id:
-
 
135
        raise TransactionServiceException(101, "bad customer id")
-
 
136
    query = Transaction.query.filter(Transaction.customer_id == customer_id)
-
 
137
    if status:
-
 
138
        query = query.filter(Transaction.status == status)
-
 
139
    if from_date:
-
 
140
        query = query.filter(Transaction.createdOn >from_date)
-
 
141
    if to_date:
-
 
142
        query = query.filter(Transaction.createdOn < to_date)
-
 
143
    return query.all()
-
 
144
 
-
 
145
def get_transactions_for_shopping_cart_id(shopping_cart_id):
-
 
146
    transactions = Transaction.query.filter_by(shopping_cart_id=shopping_cart_id).all()
-
 
147
    if not transactions:
-
 
148
        raise TransactionServiceException(108, "transactions for this shopping cart")
-
 
149
    return transactions
-
 
150
 
-
 
151
def get_transaction_status(transaction_id):
-
 
152
    if not transaction_id:
-
 
153
        raise TransactionServiceException(101, "bad transaction id")
-
 
154
    
-
 
155
    transaction = get_transaction(transaction_id)
-
 
156
    
-
 
157
    return transaction.status
-
 
158
 
-
 
159
def change_transaction_status(transaction_id, new_status, description):
-
 
160
    transaction = get_transaction(transaction_id)
-
 
161
    transaction.status = new_status
-
 
162
    transaction.status_message = description
-
 
163
    session.commit()
-
 
164
    return True
-
 
165
 
-
 
166
 
-
 
167
def get_order(order_id):
-
 
168
    order = Order.get_by(id=order_id)
-
 
169
    if not order:
-
 
170
        raise TransactionServiceException(108, "no such order")
-
 
171
    
-
 
172
    return order
-
 
173
 
-
 
174
def get_orders_for_customer(customer_id, from_date, to_date, status):
-
 
175
    if not customer_id:
-
 
176
        raise TransactionServiceException(101, "bad customer id")
-
 
177
    query = Order.query.filter(Order.customer_id == customer_id)
-
 
178
    if status:
-
 
179
        query = query.filter(Order.status == status)
-
 
180
    if from_date:
-
 
181
        query = query.filter(Order.created_timestamp >from_date)
-
 
182
    if to_date:
-
 
183
        query = query.filter(Order.created_timestamp < to_date)
-
 
184
    return query.all()
-
 
185
 
-
 
186
def get_all_orders(status, from_date, to_date, warehouse_id):
-
 
187
    if not warehouse_id:
-
 
188
        raise TransactionServiceException(101, "bad warehouse id")
-
 
189
    query = Order.query.filter(Order.warehouse_id == warehouse_id)
-
 
190
    if status:
-
 
191
        query = query.filter(Order.status == status)
-
 
192
    if from_date:
-
 
193
        query = query.filter(Order.created_timestamp >from_date)
-
 
194
    if to_date:
-
 
195
        query = query.filter(Order.created_timestamp < to_date)
-
 
196
    return query.all()
-
 
197
 
-
 
198
    
-
 
199
def change_order_status(self, orderId, status, description):
-
 
200
    order = get_order(orderId)
-
 
201
    order.status = status
-
 
202
    order.statusDescription = description
-
 
203
    session.commit()
-
 
204
    return True
-
 
205
    
-
 
206
    
-
 
207
def get_orders_for_transaction(transaction_id):
-
 
208
    orders = Order.query.filter_by(transaction_id=transaction_id).all()
-
 
209
    if not orders:
-
 
210
        raise TransactionServiceException(101, "No order for the transaction")
-
 
211
    return orders
-
 
212
 
-
 
213
def get_line_items_for_order(order_id):
-
 
214
    query = LineItem.query.filter(LineItem.order_id == order_id)
-
 
215
    return query.all()
-
 
216
 
-
 
217
 
-
 
218
  
-
 
219
def get_alerts(order_id, all):
-
 
220
    query = Alerts.query.filter_by(order_id=order_id)
-
 
221
    if not all:
-
 
222
        query = query.filter_by(valid=True)
-
 
223
    return query.all()
-
 
224
 
-
 
225
def set_alert(order_id, unset, type, comment):
-
 
226
    #get existing alert
-
 
227
    if unset:
-
 
228
        query = Alerts.query.filter_by(order_id=order_id)
-
 
229
        query = query.filter_by(type=type)
-
 
230
        alerts = query.all()
-
 
231
        for alert in alerts:
-
 
232
            if alert.valid:
-
 
233
                alert.valid = False
-
 
234
                alert.comment = comment
-
 
235
                alert.time_unset = datetime.datetime.now()
-
 
236
    else:
-
 
237
        alert = Alerts()
-
 
238
        alert.order_id = order_id
-
 
239
        alert.valid = True
-
 
240
        alert.type = type
-
 
241
        alert.comment = comment
-
 
242
        alert.time_set = datetime.datetime.now()
-
 
243
    session.commit()
-
 
244
 
-
 
245
"""
19
def get_new_transaction():
246
def get_new_transaction():
20
    transaction = Transaction()
247
    transaction = Transaction()
21
    transaction.createdOn = datetime.datetime.now()
248
    transaction.createdOn = datetime.datetime.now()
22
    transaction.status = status_transaction_init 
249
    transaction.status = status_transaction_init 
23
    transaction.status_message = "New transaction"
250
    transaction.status_message = "New transaction"
Line 364... Line 591...
364
    extra_item_info.transaction_id = transaction_id
591
    extra_item_info.transaction_id = transaction_id
365
    extra_item_info.sku_id = sku_id
592
    extra_item_info.sku_id = sku_id
366
    extra_item_info.model = model
593
    extra_item_info.model = model
367
    extra_item_info.vendor = vendor
594
    extra_item_info.vendor = vendor
368
    extra_item_info.colour = colour
595
    extra_item_info.colour = colour
369
    session.commit()
-
 
370
596
    session.commit()
-
 
597
"""    
-
 
598
371
599