Subversion Repositories SmartDukaan

Rev

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

Rev 1246 Rev 1262
Line 1... Line 1...
1
'''
1
'''
2
Created on 29-Mar-2010
2
Created on 29-Mar-2010
3
 
3
 
4
@author: ashish
4
@author: ashish
5
'''
5
'''
-
 
6
from string import Template
-
 
7
from email.mime.multipart import MIMEMultipart
-
 
8
from shop2020.thriftpy.utils.ttypes import HelperServiceException, Mail
-
 
9
from email.mime.base import MIMEBase
-
 
10
from email import encoders
-
 
11
from email.mime.text import MIMEText
-
 
12
import os
-
 
13
import smtplib
-
 
14
import time
-
 
15
from time import strftime
-
 
16
 
6
from shop2020.model.v1.order.impl.DataService import Transaction, LineItem,\
17
from shop2020.model.v1.order.impl.DataService import Transaction, LineItem,\
7
    Alerts, Order, BatchNoGenerator
18
    Alerts, Order, BatchNoGenerator
8
from shop2020.thriftpy.model.v1.order.ttypes import Transaction as T_Transaction,\
19
from shop2020.thriftpy.model.v1.order.ttypes import Transaction as T_Transaction,\
9
    TransactionServiceException, TransactionStatus, OrderStatus
20
    TransactionServiceException, TransactionStatus, OrderStatus
10
import datetime
21
import datetime
Line 12... Line 23...
12
from shop2020.utils.Utils import to_py_date, to_java_date
23
from shop2020.utils.Utils import to_py_date, to_java_date
13
from sqlalchemy.sql.expression import and_
24
from sqlalchemy.sql.expression import and_
14
from shop2020.model.v1 import order
25
from shop2020.model.v1 import order
15
from shop2020.clients.LogisticsClient import LogisticsClient
26
from shop2020.clients.LogisticsClient import LogisticsClient
16
from shop2020.clients.InventoryClient import InventoryClient
27
from shop2020.clients.InventoryClient import InventoryClient
-
 
28
from shop2020.clients.UserClient import UserClient
17
 
29
 
18
def get_new_transaction():
30
def get_new_transaction():
19
    transaction = Transaction()
31
    transaction = Transaction()
20
    transaction.createdOn = datetime.datetime.now()
32
    transaction.createdOn = datetime.datetime.now()
21
    transaction.status = TransactionStatus.INIT
33
    transaction.status = TransactionStatus.INIT
Line 80... Line 92...
80
            litem.quantity = line_item.quantity
92
            litem.quantity = line_item.quantity
81
            litem.unit_price = line_item.unit_price
93
            litem.unit_price = line_item.unit_price
82
            litem.unit_weight = line_item.unit_weight
94
            litem.unit_weight = line_item.unit_weight
83
            litem.total_price = line_item.total_price
95
            litem.total_price = line_item.total_price
84
            litem.total_weight = line_item.total_weight
96
            litem.total_weight = line_item.total_weight
-
 
97
            litem.transfer_price = line_item.transfer_price
85
            """
98
            """
86
            if line_item.addedOn:
99
            if line_item.addedOn:
87
                litem.added_on = to_py_date(line_item.addedOn)
100
                litem.added_on = to_py_date(line_item.addedOn)
88
            else:
101
            else:
89
                litem.added_on = datetime.datetime.now()
102
                litem.added_on = datetime.datetime.now()
Line 148... Line 161...
148
            order.tracking_id = order.airwaybill_no
161
            order.tracking_id = order.airwaybill_no
149
            order.expected_delivery_time = datetime.datetime.now() + datetime.timedelta(days=logistics_info.deliveryTime)
162
            order.expected_delivery_time = datetime.datetime.now() + datetime.timedelta(days=logistics_info.deliveryTime)
150
            
163
            
151
            catalog_client = InventoryClient().get_client()
164
            catalog_client = InventoryClient().get_client()
152
            catalog_client.reserveItemInWarehouse(item_id, logistics_info.warehouseId, order.lineitems[0].quantity)
165
            catalog_client.reserveItemInWarehouse(item_id, logistics_info.warehouseId, order.lineitems[0].quantity)
-
 
166
        
-
 
167
        #Email the information of order placed to customer
-
 
168
        email_transaction_info_to_user(transaction_id)
153
    session.commit()
169
    session.commit()
154
    return True
170
    return True
155
 
171
 
-
 
172
def email_transaction_info_to_user(transaction_id):
-
 
173
    transaction = get_transaction(transaction_id)
-
 
174
    
-
 
175
    html_header = """
-
 
176
<html>
-
 
177
<body>
-
 
178
<div>
-
 
179
    <p>
-
 
180
        Hello,<br /><br />
-
 
181
        Thanks for your placing your order with us. Following are the details of your order:
-
 
182
    </p>
-
 
183
    <div>
-
 
184
        Order Date: $order_date
-
 
185
    </div><hr />
-
 
186
    <div>
-
 
187
        <b>Order Details</b>
-
 
188
        <hr />
-
 
189
        <table>
-
 
190
        <tr>
-
 
191
            <th>Order No.</th>
-
 
192
            <th>Product</th>
-
 
193
            <th>Quantity</th>
-
 
194
            <th>Unit Price</th>
-
 
195
            <th>Amount</th>
-
 
196
        </tr>
-
 
197
    """
-
 
198
    total_amount = 0.0
-
 
199
    html_table = ""
-
 
200
    
-
 
201
    for order in transaction.orders:
-
 
202
        order_date = order.created_timestamp
-
 
203
        html_tr = "<tr><td>" + str(order.id) + "</td>"
-
 
204
        
-
 
205
        for lineitem in order.lineitems:
-
 
206
            html_tr += "<td>" + " ".join([lineitem.brand, lineitem.model_name, lineitem.model_number, lineitem.color]) + "</td>"
-
 
207
            html_tr += "<td>" + str(lineitem.quantity) + "</td>"
-
 
208
            html_tr += "<td>" + str(lineitem.unit_price) + "</td>"
-
 
209
            html_tr += "<td>" + str(lineitem.total_price) + "</td></tr>"
-
 
210
            total_amount += lineitem.total_price
-
 
211
            html_table += html_tr
-
 
212
    html_footer = """
-
 
213
        <tr><td colspan=5>&nbsp;</td></tr>
-
 
214
        <tr>
-
 
215
            <td colspan=4>Total Amount</td>
-
 
216
            <td>$total_amount</td>
-
 
217
        </tr>
-
 
218
        </table>
-
 
219
    </div><hr />
-
 
220
    <p>
-
 
221
        Best Wishes,<br />
-
 
222
        Saholic Team
-
 
223
    </p>
-
 
224
</div>
-
 
225
</body>
-
 
226
</html>
-
 
227
    """
-
 
228
#    formated_order_date = strftime("%B %d, %Y %H:%M %p", time.strptime(order_date, "%Y-%m-%d %H:%M:%S"))
-
 
229
    formated_order_date = order_date
-
 
230
    email_header = Template(html_header).substitute(dict(order_date = formated_order_date))
-
 
231
    email_footer = Template(html_footer).substitute(dict(total_amount = total_amount))
-
 
232
    
-
 
233
    user_client = UserClient().get_client()
-
 
234
    user = user_client.getUserById(transaction.customer_id)
-
 
235
    sendMail(Email(email_header + html_table + email_footer, "Saholic - Order Details", user.email))
-
 
236
    return True
-
 
237
 
-
 
238
class Email:
-
 
239
    def __init__(self, message, subject, to):
-
 
240
        self.data = message
-
 
241
        self.sender = ''
-
 
242
        self.subject = subject
-
 
243
        self.to = [to]
-
 
244
 
-
 
245
def sendMail(mail):
-
 
246
    if not mail:
-
 
247
        raise Exception(101, "mail not present")
-
 
248
    #msg = MIMEMultipart()
-
 
249
    #mail = Mail()
-
 
250
    if mail.sender:
-
 
251
        mail.data = "This mail is sent by " + mail.sender + "\n" + mail.data
-
 
252
        
-
 
253
    msg = MIMEText(mail.data, 'html')
-
 
254
    msg['To'] = ', '.join( mail.to )
-
 
255
    if mail.sender:
-
 
256
        msg['From'] = mail.sender
-
 
257
    else:    
-
 
258
        msg['From'] = "help@saholic.com"
-
 
259
    msg['Subject'] = mail.subject
-
 
260
    #msg.attach(mail.data)
-
 
261
    
-
 
262
    for to in mail.to:
-
 
263
        mail.sender = "help@shop2020.in"
-
 
264
        mail.password = "5h0p2o2o"
-
 
265
        mailServer = smtplib.SMTP("smtp.gmail.com", 587)
-
 
266
        mailServer.ehlo()
-
 
267
        mailServer.starttls()
-
 
268
        mailServer.ehlo()
-
 
269
        mailServer.login(mail.sender, mail.password)
-
 
270
        mailServer.sendmail(mail.password, to, msg.as_string())
-
 
271
        # Should be mailServer.quit(), but that crashes...
-
 
272
        mailServer.close()
156
 
273
 
157
def get_order(order_id):
274
def get_order(order_id):
158
    order = Order.get_by(id=order_id)
275
    order = Order.get_by(id=order_id)
159
    if not order:
276
    if not order:
160
        raise TransactionServiceException(108, "no such order")
277
        raise TransactionServiceException(108, "no such order")