Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
353 ashish 1
'''
2
Created on 14-Jul-2010
3
 
4
@author: ashish
5
'''
5110 mandeep.dh 6
from elixir import *
7
from email import encoders
8
from email.mime.base import MIMEBase
353 ashish 9
from email.mime.multipart import MIMEMultipart
5110 mandeep.dh 10
from email.mime.text import MIMEText
11
from shop2020.helpers.impl import DataService
4806 varun.gupt 12
from shop2020.helpers.impl.DataService import Message, UserEmail, EntitiesShared, \
13
    Report, ReportRoleAuthority, CatalogDashboardUser, UserEmailArchive, QuickLink
5110 mandeep.dh 14
from shop2020.helpers.impl.model.Agent import Agent
15
from shop2020.helpers.impl.model.DashboardUser import DashboardUser
16
from shop2020.thriftpy.utils.ttypes import HelperServiceException, Mail, \
17
    Message as Msg
18
from shop2020.utils.Utils import log_entry, to_py_date
19
from sqlalchemy.orm import query
353 ashish 20
from string import Template
494 rajveer 21
import datetime
5110 mandeep.dh 22
import os
23
import smtplib
5483 varun.gupt 24
from shop2020.clients.CatalogClient import CatalogClient
353 ashish 25
 
3187 rajveer 26
def initialize(dbname='helper', db_hostname="localhost"):
494 rajveer 27
    log_entry("initialize@DataAccessor", "Initializing data service")
3187 rajveer 28
    DataService.initialize(dbname, db_hostname)
494 rajveer 29
 
1395 varun.gupt 30
def save_user_email_for_sending(email_to, email_from, subject, body, source, email_type):
31
    user_email = UserEmail()
32
    user_email.emailTo = email_to
33
    user_email.emailFrom = email_from
34
    user_email.subject = subject
35
    user_email.body = body
36
    user_email.source = source
37
    user_email.emailType = email_type
38
    user_email.status = False
39
    user_email.timestamp = datetime.datetime.now()
40
    session.commit()
3206 mandeep.dh 41
    return user_email.id
1422 varun.gupt 42
 
3086 rajveer 43
def get_emails_to_be_sent():
1422 varun.gupt 44
    print "get_emails_to_be_sent"
3005 chandransh 45
    return UserEmail.query.all()
1422 varun.gupt 46
 
47
def mark_email_as_sent(email_id):
3005 chandransh 48
    query = 'INSERT INTO ' + str(UserEmailArchive.table) + ' (select * from ' + str(UserEmail.table) + ' where id = ' + str(email_id) + ')'
49
    session.execute(query, mapper=UserEmailArchive)
1422 varun.gupt 50
    email = UserEmail.get_by(id = email_id)
3005 chandransh 51
    if email:
52
        email.delete()
1422 varun.gupt 53
    session.commit()
54
 
353 ashish 55
def sendMail(mail):
56
    if not mail:
57
        raise HelperServiceException(101, "mail not present")
581 rajveer 58
    #msg = MIMEMultipart()
59
    #mail = Mail()
928 rajveer 60
    if mail.sender:
61
        mail.data = "This mail is sent by " + mail.sender + "\n" + mail.data
62
 
581 rajveer 63
    msg = MIMEText(mail.data)
900 rajveer 64
    msg['To'] = ', '.join( mail.to )
928 rajveer 65
    if mail.sender:
66
        msg['From'] = mail.sender
67
    else:    
68
        msg['From'] = "help@saholic.com"
900 rajveer 69
    msg['Subject'] = mail.subject
581 rajveer 70
    #msg.attach(mail.data)
353 ashish 71
 
72
    #handle attachments in mail
73
    if mail.attachments:
74
        for attach in mail.attachments:
75
 
76
            part = MIMEBase('application', 'octet-stream')
77
            part.set_payload(open(attach, 'rb').read())
78
            encoders.encode_base64(part)
79
            part.add_header('Content-Disposition',
80
                    'attachment; filename="%s"' % os.path.basename(attach))
81
            msg.attach(part)
900 rajveer 82
 
353 ashish 83
    for to in mail.to:
873 rajveer 84
        mail.sender = "help@shop2020.in"
85
        mail.password = "5h0p2o2o"
353 ashish 86
        mailServer = smtplib.SMTP("smtp.gmail.com", 587)
87
        mailServer.ehlo()
88
        mailServer.starttls()
89
        mailServer.ehlo()
90
        mailServer.login(mail.sender, mail.password)
91
        mailServer.sendmail(mail.password, to, msg.as_string())
92
        # Should be mailServer.quit(), but that crashes...
93
        mailServer.close() 
94
 
95
def sendText(text):
96
    pass
97
 
98
def addMessage(message):
99
    msg = Message.get_by(message_id=message.id)
100
    if msg:
101
        raise HelperServiceException(101, "Message is already present. Please try updation api instead")
102
    msg = Message();
103
    msg.message_id = message.id
104
    msg.message = message.message
105
    session.commit()
106
 
107
def getMessage(message_id):
108
    msg = Message.get_by(id=message_id)
109
    message = Msg()
110
    message.id = msg.message_id
111
    message.message = msg.message
112
    return message
113
 
114
def updateMessage(id, message):
115
    msg = Message.get_by(message_id=id)
116
    if msg:
117
        msg.message = message
118
        session.commit()
119
    else:
120
        raise HelperServiceException(101, "message could not be found with id %d" %(id))
121
 
122
def getSubstitutedMessage(id, params):
123
    #get the message first
124
    msg = Message.get_by(message_id=id)
125
    if not msg:
126
        raise HelperServiceException(101, "message could not be found with id %d" %(id))
127
    if params:
128
        s = Template(msg.message)
129
        s = s.safe_substitute(params)
130
        return s
131
    else:
132
        return msg.message
494 rajveer 133
 
134
def add_user(username, password, warehouseId):
135
    user = DashboardUser()
136
    user.username = username
137
    user.password = password
138
    user.warehouseId = warehouseId
139
    user.addedOn = datetime.datetime.now()
140
    user.status = 0
141
    try:
142
        session.commit()
143
        return True
144
    except:
145
        raise HelperServiceException(101, "Some error while adding user")
146
        return False
147
 
148
def delete_user(username):
149
    user = DashboardUser.get_by(username=username)
150
    if user is None:
151
        return False
152
    user.delete()
766 rajveer 153
    session.commit()
494 rajveer 154
    return True
155
 
2445 chandransh 156
def authenticate_dashboard_user(username, password):
157
    user = DashboardUser.get_by(username=username, password=password)
494 rajveer 158
    if user is None:
2445 chandransh 159
        raise HelperServiceException(101, "No dashboard user found")
494 rajveer 160
 
2445 chandransh 161
    user.loggedOn = datetime.datetime.now()
162
    session.commit()
163
    return user.to_thrift_object()
164
 
494 rajveer 165
def update_password(username, oldPassword, newPassword):
166
    user = DashboardUser.get_by(username=username)
167
    if user is None:
168
        return False
169
    if user.password == oldPassword:
170
        user.password = newPassword
766 rajveer 171
        session.commit()
494 rajveer 172
        return True
766 rajveer 173
    return False
174
 
1891 ankur.sing 175
def get_reports(role):
176
    query = session.query(Report).join(ReportRoleAuthority)
177
    query = query.filter(ReportRoleAuthority.role == role)
178
    reports = query.all()
179
    return reports
180
 
4806 varun.gupt 181
def share_entities(entityIds, email):
182
    if entityIds:
183
        entityIdsStr = ''
5483 varun.gupt 184
        email_body = get_email_body_for_product_sharing(entityIds)
185
        save_user_email_for_sending(email, '', 'Check out Saholic.com', email_body, '', 'MOBILE_SHARE')
4806 varun.gupt 186
 
187
        for entityId in entityIds:
188
            entityIdsStr += str(entityId)
189
 
190
        entities_to_be_shared = EntitiesShared()
191
        entities_to_be_shared.entityIds = entityIdsStr
192
        entities_to_be_shared.email = email
193
        entities_to_be_shared.isEmailed = False
194
        session.commit()
195
 
5483 varun.gupt 196
def get_email_body_for_product_sharing(entityIds):
197
    catalog_client = CatalogClient().get_client()
198
 
199
    emailBody = '<html><body><p>Check out following products on Saholic:</p><ul>\n'
200
    for entityId in entityIds:
201
        list_items = catalog_client.getItemsByCatalogId(entityId)
202
        url = 'http://www.saholic.com/entity/%s' % (entityId)
203
        item = list_items[0]
204
        name = item.brand + ' '
205
        name += item.modelName + ' ' if item.modelName is not None else ''
206
        name += item.modelNumber if item.modelNumber is not None else ''
207
        emailBody += '<li><a href="%s">%s</a></li>' % (url, name)
208
    emailBody += '</ul></body></html>'
209
    return emailBody
210
 
4806 varun.gupt 211
def save_quick_link(url, text):
212
    quickLink = QuickLink()
213
    quickLink.url = url
214
    quickLink.text = text
215
    session.commit()
216
 
217
def get_quick_links():
218
    return QuickLink.query.all()
219
 
4996 varun.gupt 220
def update_quicklink(id, url, text):
221
    quicklink = QuickLink.get_by(id = id)
222
    quicklink.url = url
223
    quicklink.text = text
224
    session.commit()
225
 
5110 mandeep.dh 226
def update_password_for_agent(agentEmailId, password):
227
    agent = Agent.get_by(emailId = agentEmailId)
228
    agent.password = password
229
    session.commit()
230
 
5055 varun.gupt 231
def get_emails_for_notifications_sent(start_datetime, end_datetime):
232
    query = UserEmailArchive.query.filter(UserEmailArchive.emailType == 'ProductNotification')
233
    query = query.filter(UserEmailArchive.timestamp >= start_datetime)
234
    query = query.filter(UserEmailArchive.timestamp <= end_datetime)
235
    return query.all()
236
 
766 rajveer 237
def close_session():
238
    if session.is_active:
239
        print "session is active. closing it."
3376 rajveer 240
        session.close()
241
 
242
def is_alive():
243
    try:
244
        return True
245
    except:
246
        return False