Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
104 ashish 1
'''
2
Created on 29-Mar-2010
3
 
4
@author: ashish
5
'''
6
from shop2020.model.v1.order.impl.DataService import Transaction, LineItem,\
685 chandransh 7
    Alerts, Order
104 ashish 8
from shop2020.thriftpy.model.v1.order.ttypes import Transaction as T_Transaction,\
690 chandransh 9
    TransactionServiceException, TransactionStatus, OrderStatus
104 ashish 10
import datetime
483 rajveer 11
from shop2020.utils.OrderStatus import status_transaction_init, get_c_status
122 ashish 12
from elixir import *
104 ashish 13
from shop2020.utils.Utils import to_py_date
14
from sqlalchemy.sql.expression import and_
483 rajveer 15
from shop2020.model.v1 import order
104 ashish 16
 
17
def get_new_transaction():
18
    transaction = Transaction()
19
    transaction.createdOn = datetime.datetime.now()
353 ashish 20
    transaction.status = status_transaction_init 
104 ashish 21
    transaction.status_message = "New transaction"
483 rajveer 22
    return transaction
23
 
24
def create_order(t_order):
25
    order = Order()
26
    if t_order.warehouse_id:
27
        order.warehouse_id = t_order.warehouse_id
509 rajveer 28
    if t_order.logistics_provider_id:    
483 rajveer 29
        order.logistics_provider_id = t_order.logistics_provider_id
30
        order.airwaybill_no = t_order.airwaybill_no
31
        order.tracking_id = t_order.tracking_id
32
    if t_order.expected_delivery_time:    
33
        order.expected_delivery_time = to_py_date(t_order.expected_delivery_time)
34
    if t_order.customer_id:    
35
        order.customer_id = t_order.customer_id
36
        order.customer_name = t_order.customer_name
37
        order.customer_mobilenumber = t_order.customer_mobilenumber
38
        order.customer_pincode = t_order.customer_pincode
39
        order.customer_address = t_order.customer_address
40
        order.customer_email = t_order.customer_email
41
    #new status and status description to be added    
509 rajveer 42
    order.status = get_c_status(t_order.status)  
483 rajveer 43
    order.statusDescription = t_order.statusDescription
44
    order.total_amount = t_order.total_amount
45
    order.total_weight = t_order.total_weight
46
    if t_order.created_timestamp:
47
        order.created_timestamp = to_py_date(t_order.created_timestamp)
48
    else:
685 chandransh 49
        order.created_timestamp = datetime.datetime.now()
483 rajveer 50
    return order
51
 
52
def create_transaction(t_transaction):
53
    t_orders = t_transaction.orders
54
    if not t_orders:
55
        raise TransactionServiceException(101, "Orders missing from the transaction")
56
    transaction = get_new_transaction()
57
    transaction.customer_id = t_transaction.customer_id 
58
    transaction.shopping_cart_id = t_transaction.shoppingCartid
59
 
60
    for t_order in t_orders:
61
        order = create_order(t_order)
62
        order.transaction = transaction 
63
        for line_item in t_order.lineitems:
64
            litem = LineItem()
65
            litem.sku_id = line_item.sku_id
66
            litem.brand = line_item.brand
67
            if line_item.model_number:
68
                litem.model_number = line_item.model_number
69
            if line_item.model_name:    
70
                litem.model_name = line_item.model_name
71
            if line_item.extra_info:
72
                litem.extra_info = line_item.extra_info
73
            litem.quantity = line_item.quantity
74
            litem.unit_price = line_item.unit_price
75
            litem.unit_weight = line_item.unit_weight
76
            litem.total_price = line_item.total_price
77
            litem.total_weight = line_item.total_weight
78
            """
79
            if line_item.addedOn:
80
                litem.added_on = to_py_date(line_item.addedOn)
81
            else:
82
                litem.added_on = datetime.datetime.now()
83
            """
84
            litem.order = order
85
    session.commit()
86
    return transaction.id
87
 
88
def get_transaction(transaction_id):
89
    transaction = Transaction.get_by(id=transaction_id)
90
    if not transaction:
91
        raise TransactionServiceException(108, "no such transaction")
92
 
93
    return transaction
94
 
95
def get_transactions_for_customer(customer_id, from_date, to_date, status):
96
    if not customer_id:
97
        raise TransactionServiceException(101, "bad customer id")
98
    query = Transaction.query.filter(Transaction.customer_id == customer_id)
99
    if status:
100
        query = query.filter(Transaction.status == status)
101
    if from_date:
102
        query = query.filter(Transaction.createdOn >from_date)
103
    if to_date:
104
        query = query.filter(Transaction.createdOn < to_date)
105
    return query.all()
106
 
107
def get_transactions_for_shopping_cart_id(shopping_cart_id):
108
    transactions = Transaction.query.filter_by(shopping_cart_id=shopping_cart_id).all()
109
    if not transactions:
110
        raise TransactionServiceException(108, "transactions for this shopping cart")
111
    return transactions
112
 
113
def get_transaction_status(transaction_id):
114
    if not transaction_id:
115
        raise TransactionServiceException(101, "bad transaction id")
116
 
117
    transaction = get_transaction(transaction_id)
118
 
119
    return transaction.status
120
 
121
def change_transaction_status(transaction_id, new_status, description):
122
    transaction = get_transaction(transaction_id)
123
    transaction.status = new_status
124
    transaction.status_message = description
690 chandransh 125
    if new_status == TransactionStatus.FAILED:
126
        for order in transaction.orders:
127
            order.status = OrderStatus.PAYMENT_FAILED
128
    elif new_status == TransactionStatus.IN_PROCESS:
129
        for order in transaction.orders:
130
            order.status = OrderStatus.SUBMITTED_FOR_PROCESSING
483 rajveer 131
    session.commit()
132
    return True
133
 
134
 
135
def get_order(order_id):
136
    order = Order.get_by(id=order_id)
137
    if not order:
138
        raise TransactionServiceException(108, "no such order")
139
 
140
    return order
141
 
142
def get_orders_for_customer(customer_id, from_date, to_date, status):
143
    if not customer_id:
144
        raise TransactionServiceException(101, "bad customer id")
145
    query = Order.query.filter(Order.customer_id == customer_id)
146
    if status:
147
        query = query.filter(Order.status == status)
148
    if from_date:
149
        query = query.filter(Order.created_timestamp >from_date)
150
    if to_date:
151
        query = query.filter(Order.created_timestamp < to_date)
152
    return query.all()
153
 
154
def get_all_orders(status, from_date, to_date, warehouse_id):
155
    if not warehouse_id:
156
        raise TransactionServiceException(101, "bad warehouse id")
157
    query = Order.query.filter(Order.warehouse_id == warehouse_id)
158
    if status:
159
        query = query.filter(Order.status == status)
160
    if from_date:
161
        query = query.filter(Order.created_timestamp >from_date)
162
    if to_date:
163
        query = query.filter(Order.created_timestamp < to_date)
164
    return query.all()
165
 
166
 
167
def change_order_status(self, orderId, status, description):
168
    order = get_order(orderId)
169
    order.status = status
170
    order.statusDescription = description
171
    session.commit()
172
    return True
173
 
174
 
175
def get_orders_for_transaction(transaction_id):
176
    orders = Order.query.filter_by(transaction_id=transaction_id).all()
177
    if not orders:
178
        raise TransactionServiceException(101, "No order for the transaction")
179
    return orders
180
 
181
def get_line_items_for_order(order_id):
182
    query = LineItem.query.filter(LineItem.order_id == order_id)
183
    return query.all()
184
 
185
 
642 chandransh 186
def add_billing_details(orderId, invoice_number, jacket_number, billed_by):
494 rajveer 187
    order = Order.get_by(id=orderId)
188
    if not order:
189
        raise TransactionServiceException(101, "No order found for the givem orderid")
190
    order.invoice_number = invoice_number
642 chandransh 191
    order.jacket_number = jacket_number
494 rajveer 192
    order.billed_by = billed_by
193
    session.commit()
194
    return True
195
 
483 rajveer 196
def get_alerts(order_id, all):
197
    query = Alerts.query.filter_by(order_id=order_id)
198
    if not all:
199
        query = query.filter_by(valid=True)
200
    return query.all()
201
 
202
def set_alert(order_id, unset, type, comment):
203
    #get existing alert
204
    if unset:
205
        query = Alerts.query.filter_by(order_id=order_id)
206
        query = query.filter_by(type=type)
207
        alerts = query.all()
208
        for alert in alerts:
209
            if alert.valid:
210
                alert.valid = False
211
                alert.comment = comment
212
                alert.time_unset = datetime.datetime.now()
213
    else:
214
        alert = Alerts()
215
        alert.order_id = order_id
216
        alert.valid = True
217
        alert.type = type
218
        alert.comment = comment
219
        alert.time_set = datetime.datetime.now()
685 chandransh 220
    session.commit()