Subversion Repositories SmartDukaan

Rev

Rev 1891 | Rev 2445 | 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
'''
6
from email.mime.multipart import MIMEMultipart
7
from shop2020.thriftpy.utils.ttypes import HelperServiceException, Mail
8
from email.mime.base import MIMEBase
9
from email import encoders
10
import os
11
import smtplib
494 rajveer 12
from shop2020.utils.Utils import log_entry, to_py_date
1891 ankur.sing 13
from shop2020.helpers.impl.DataService import Message, DashboardUser, UserEmail,\
2025 ankur.sing 14
    Report, ReportRoleAuthority, CatalogDashboardUser
494 rajveer 15
 
353 ashish 16
from elixir import *
17
 
18
from shop2020.thriftpy.utils.ttypes import Message as Msg
19
from string import Template
494 rajveer 20
import datetime
21
from shop2020.helpers.impl import DataService
581 rajveer 22
from email.mime.text import MIMEText
1422 varun.gupt 23
from sqlalchemy.orm import query
353 ashish 24
 
1248 chandransh 25
def initialize(dbname='helper'):
494 rajveer 26
    log_entry("initialize@DataAccessor", "Initializing data service")
1248 chandransh 27
    DataService.initialize(dbname)
494 rajveer 28
 
1395 varun.gupt 29
def save_user_email_for_sending(email_to, email_from, subject, body, source, email_type):
30
    user_email = UserEmail()
31
    user_email.emailTo = email_to
32
    user_email.emailFrom = email_from
33
    user_email.subject = subject
34
    user_email.body = body
35
    user_email.source = source
36
    user_email.emailType = email_type
37
    user_email.status = False
38
    user_email.timestamp = datetime.datetime.now()
39
    session.commit()
1422 varun.gupt 40
 
41
def get_emails_to_be_sent(email_type):
42
    print "get_emails_to_be_sent"
43
    return UserEmail.query.filter_by(status = False).all()
44
 
45
def mark_email_as_sent(email_id):
46
    email = UserEmail.get_by(id = email_id)
47
    email.status = True
48
    session.commit()
49
 
353 ashish 50
def sendMail(mail):
51
    if not mail:
52
        raise HelperServiceException(101, "mail not present")
581 rajveer 53
    #msg = MIMEMultipart()
54
    #mail = Mail()
928 rajveer 55
    if mail.sender:
56
        mail.data = "This mail is sent by " + mail.sender + "\n" + mail.data
57
 
581 rajveer 58
    msg = MIMEText(mail.data)
900 rajveer 59
    msg['To'] = ', '.join( mail.to )
928 rajveer 60
    if mail.sender:
61
        msg['From'] = mail.sender
62
    else:    
63
        msg['From'] = "help@saholic.com"
900 rajveer 64
    msg['Subject'] = mail.subject
581 rajveer 65
    #msg.attach(mail.data)
353 ashish 66
 
67
    #handle attachments in mail
68
    if mail.attachments:
69
        for attach in mail.attachments:
70
 
71
            part = MIMEBase('application', 'octet-stream')
72
            part.set_payload(open(attach, 'rb').read())
73
            encoders.encode_base64(part)
74
            part.add_header('Content-Disposition',
75
                    'attachment; filename="%s"' % os.path.basename(attach))
76
            msg.attach(part)
900 rajveer 77
 
353 ashish 78
    for to in mail.to:
873 rajveer 79
        mail.sender = "help@shop2020.in"
80
        mail.password = "5h0p2o2o"
353 ashish 81
        mailServer = smtplib.SMTP("smtp.gmail.com", 587)
82
        mailServer.ehlo()
83
        mailServer.starttls()
84
        mailServer.ehlo()
85
        mailServer.login(mail.sender, mail.password)
86
        mailServer.sendmail(mail.password, to, msg.as_string())
87
        # Should be mailServer.quit(), but that crashes...
88
        mailServer.close() 
89
 
90
def sendText(text):
91
    pass
92
 
93
def addMessage(message):
94
    msg = Message.get_by(message_id=message.id)
95
    if msg:
96
        raise HelperServiceException(101, "Message is already present. Please try updation api instead")
97
    msg = Message();
98
    msg.message_id = message.id
99
    msg.message = message.message
100
    session.commit()
101
 
102
def getMessage(message_id):
103
    msg = Message.get_by(id=message_id)
104
    message = Msg()
105
    message.id = msg.message_id
106
    message.message = msg.message
107
    return message
108
 
109
def updateMessage(id, message):
110
    msg = Message.get_by(message_id=id)
111
    if msg:
112
        msg.message = message
113
        session.commit()
114
    else:
115
        raise HelperServiceException(101, "message could not be found with id %d" %(id))
116
 
117
def getSubstitutedMessage(id, params):
118
    #get the message first
119
    msg = Message.get_by(message_id=id)
120
    if not msg:
121
        raise HelperServiceException(101, "message could not be found with id %d" %(id))
122
    if params:
123
        s = Template(msg.message)
124
        s = s.safe_substitute(params)
125
        return s
126
    else:
127
        return msg.message
494 rajveer 128
 
129
def add_user(username, password, warehouseId):
130
    user = DashboardUser()
131
    user.username = username
132
    user.password = password
133
    user.warehouseId = warehouseId
134
    user.addedOn = datetime.datetime.now()
135
    user.status = 0
136
    try:
137
        session.commit()
138
        return True
139
    except:
140
        raise HelperServiceException(101, "Some error while adding user")
141
        return False
142
 
143
def delete_user(username):
144
    user = DashboardUser.get_by(username=username)
145
    if user is None:
146
        return False
147
    user.delete()
766 rajveer 148
    session.commit()
494 rajveer 149
    return True
150
 
151
def authenticate_user(username, password):
152
    user = DashboardUser.get_by(username=username)
153
    if user is None:
154
        return -1
155
    if user.password == password:
156
        user.loggedOn = datetime.datetime.now()
157
        session.commit()
158
        return user.warehouseId
159
    return -1
160
 
161
def update_password(username, oldPassword, newPassword):
162
    user = DashboardUser.get_by(username=username)
163
    if user is None:
164
        return False
165
    if user.password == oldPassword:
166
        user.password = newPassword
766 rajveer 167
        session.commit()
494 rajveer 168
        return True
766 rajveer 169
    return False
170
 
1891 ankur.sing 171
def get_reports(role):
172
    query = session.query(Report).join(ReportRoleAuthority)
173
    query = query.filter(ReportRoleAuthority.role == role)
174
    reports = query.all()
175
    return reports
176
 
766 rajveer 177
def close_session():
178
    if session.is_active:
179
        print "session is active. closing it."
180
        session.close()