132 lines
4.9 KiB
Python
132 lines
4.9 KiB
Python
from sqlalchemy import create_engine, Column, Integer, String, BOOLEAN
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
from sqlalchemy.orm import sessionmaker
|
|
import xlwt
|
|
|
|
UserAddressID = []
|
|
ActiveUser = []
|
|
LineCount = 1
|
|
|
|
engine = create_engine('mssql+pymssql://IDV2Ridge:cWZSGWXS9muyYkHN*@10.10.10.50/IDV2Ridge', echo=False)
|
|
engine.connect()
|
|
Base = declarative_base()
|
|
|
|
|
|
class UserAddress(Base):
|
|
__tablename__ = 'UserAddress'
|
|
|
|
UserId = Column(Integer, primary_key=True)
|
|
AddressId = Column(Integer, primary_key=True)
|
|
|
|
|
|
class Address(Base):
|
|
__tablename__ = 'Address'
|
|
|
|
Id = Column(Integer, primary_key=True)
|
|
ContactName = Column(String)
|
|
CompanyName = Column(String)
|
|
Line1 = Column(String)
|
|
Line2 = Column(String)
|
|
City = Column(String)
|
|
StateId = Column(Integer)
|
|
PostalCode = Column(String)
|
|
CountryId = Column(Integer)
|
|
PhoneNumber = Column(String)
|
|
EmailAddress = Column(String)
|
|
|
|
|
|
class User(Base):
|
|
__tablename__ = 'User'
|
|
|
|
ID = Column(Integer, primary_key=True)
|
|
FirstName = Column(String)
|
|
LastName = Column(String)
|
|
IsDeleted = Column(BOOLEAN)
|
|
Email = Column(String)
|
|
|
|
|
|
class State(Base):
|
|
__tablename__ = 'State'
|
|
Id = Column(Integer, primary_key=True)
|
|
StateName = Column(String)
|
|
|
|
|
|
class Country(Base):
|
|
__tablename__ = 'Country'
|
|
Id = Column(Integer, primary_key=True)
|
|
CountryName = Column(String)
|
|
|
|
|
|
Session = sessionmaker(bind=engine)
|
|
session = Session()
|
|
|
|
# Get list of active users
|
|
for user in session.query(User).filter(User.IsDeleted == 0).filter(User.Email.notlike('%gll.com')):
|
|
ActiveUser.append([user.ID, user.FirstName, user.LastName])
|
|
|
|
# loop through each user in the ActiveUser array. Combine Users First/Last name for the filename and
|
|
# the first letter/last name combo for username
|
|
for each in ActiveUser:
|
|
if session.query(Address).filter(UserAddress.UserId == each[0]).first() is not None:
|
|
FileName = each[1] + ' ' + each[2]
|
|
UserName = (each[1][0]+each[2]).upper()
|
|
|
|
print('====================='+FileName+'========================')
|
|
|
|
# Setup XLS workbook and sheet
|
|
wb = xlwt.Workbook()
|
|
ws = wb.add_sheet('Addresses')
|
|
|
|
# Write header row
|
|
ws.write(0, 0, 'ACTION')
|
|
ws.write(0, 1, 'BU_ID')
|
|
ws.write(0, 2, 'LOGIN_ID')
|
|
ws.write(0, 3, 'PA_NAME')
|
|
ws.write(0, 4, 'PA_NAME2')
|
|
ws.write(0, 5, 'LINE1')
|
|
ws.write(0, 6, 'LINE2')
|
|
ws.write(0, 7, 'LINE3')
|
|
ws.write(0, 8, 'CITY')
|
|
ws.write(0, 9, 'STATE')
|
|
ws.write(0, 10, 'ZIP')
|
|
ws.write(0, 11, 'COUNTRY')
|
|
ws.write(0, 12, 'PHONE_NR')
|
|
ws.write(0, 13, 'SHIP_TO_ATTN_TX')
|
|
ws.write(0, 14, 'PROFILE_TYPE')
|
|
|
|
|
|
# For each username we're filtering the UserAddress table by their userID and adding it to the UserAddressID array.
|
|
# The UserAddressID array is then looped through and for each AddressID we pull the Address information,
|
|
# State Information, and Country Information and combine it into one result
|
|
|
|
for ua in session.query(UserAddress).filter(UserAddress.UserId == each[0]):
|
|
UserAddressID.append(ua.AddressId)
|
|
|
|
for aid in UserAddressID:
|
|
# for cn in session.query(Address, State, Country).join(State, Address.StateId == State.Id).join(Country, Address.CountryId == Country.Id).filter(Address.Id == aid):
|
|
for cn in session.query(Address, State, Country).join(State, Address.StateId == State.Id).join(Country, Address.CountryId == Country.Id).filter(Address.Id == aid):
|
|
# Combine all the required fields into one variable for simplicity
|
|
AddresssBookLine = UserName, cn[0].CompanyName, cn[0].Line1, cn[0].Line2, cn[0].City, cn[1].StateName, cn[0].PostalCode, cn[0].CountryId, cn[0].PhoneNumber, cn[0].ContactName, cn[2].CountryName
|
|
# Loop through each row and populate the variable columns with the corresponding AddressBookLine element
|
|
ws.write(LineCount, 2, AddresssBookLine[0])
|
|
ws.write(LineCount, 3, AddresssBookLine[1])
|
|
ws.write(LineCount, 5, AddresssBookLine[2])
|
|
ws.write(LineCount, 6, AddresssBookLine[3])
|
|
ws.write(LineCount, 8, AddresssBookLine[4])
|
|
ws.write(LineCount, 9, AddresssBookLine[5])
|
|
ws.write(LineCount, 10, AddresssBookLine[6])
|
|
if AddresssBookLine[7] == 1:
|
|
ws.write(LineCount, 11, 'USA')
|
|
else:
|
|
ws.write(LineCount, 11, AddresssBookLine[10][:3])
|
|
ws.write(LineCount, 12, AddresssBookLine[8])
|
|
ws.write(LineCount, 13, AddresssBookLine[9])
|
|
LineCount = LineCount + 1
|
|
print(LineCount)
|
|
UserAddressID = []
|
|
LineCount = 1
|
|
|
|
wb.save('AddressBooks/'+FileName+'.xls')
|
|
else:
|
|
print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! NONE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
|