Files
zhijie-ERP/plugin/xls.py
T

184 lines
6.6 KiB
Python
Raw Normal View History

2015-07-30 13:01:42 +08:00
# created at 15-6-27
# coding=utf-8
__author__ = 'zhugl'
import xlrd
import os
import datetime
from mis import settings
class Handler(object):
name = ''
def handle(self,obj,f):
pass
class OPSHandler(Handler):
"""
导入基础信息:部门,岗位,职员
"""
name = 'OPS'
def handle(self,obj,f):
if f and f.name.endswith('.xls'):
path = os.path.join(settings.MEDIA_ROOT,f.name)
workbook = xlrd.open_workbook(path)
for sheet in workbook.sheets():
if sheet.name == u'部门' or sheet.name == 'department':
self.department(obj,sheet)
elif sheet.name == u'岗位' or sheet.name == 'position':
self.position(obj,sheet)
elif sheet.name == u'职员' or sheet.name == 'employee':
self.stuff(obj,sheet)
def department(self,obj,sheet):
from organ.models import OrgUnit
row_count = sheet.nrows
if obj.is_clear:
OrgUnit.objects.update(end=datetime.date.today())
for row_index in range(1,row_count):
row = sheet.row_values(row_index)
weight = 99
if row[6]:
weight = row[6]
OrgUnit.objects.create(code=row[0],name=row[1],short=row[2],pinyin=row[3],begin=datetime.date.today(),
end=datetime.date(9999,12,31),weight=weight)
for row_index in range(1,row_count):
row = sheet.row_values(row_index)
if len(row[4]) > 0:
try:
parent = OrgUnit.objects.get(code=row[4])
OrgUnit.objects.filter(code=row[0]).update(parent=parent)
except Exception,e:
pass
def position(self,obj,sheet):
from organ.models import Position,OrgUnit
row_count = sheet.nrows
if obj.is_clear:
Position.objects.update(end=datetime.date.today())
for row_index in range(1,row_count):
row = sheet.row_values(row_index)
depart = None
if len(row[4]) > 0:
try:
depart = OrgUnit.objects.filter(code=row[4],end__gt=datetime.date.today()).all()[0]
except Exception,e:
pass
weight = 99
if row[6]:
weight = row[6]
Position.objects.create(code=row[0],name=row[1],unit=depart,begin=datetime.date.today(),
end=datetime.date(9999,12,31),weight=weight)
for row_index in range(1,row_count):
row = sheet.row_values(row_index)
if len(row[2]) > 0:
try:
parent = Position.objects.filter(code=row[2],end__gt=datetime.date.today()).all()[0]
Position.objects.filter(code=row[0]).update(parent=parent)
except Exception,e:
pass
def stuff(self,obj,sheet):
from organ.models import Position
from basedata.models import Employee
from django.contrib.auth.models import User,Group
row_count = sheet.nrows
try:
group = Group.objects.get_by_natural_key(u'职员')
except Exception,e:
pass
for row_index in range(1,row_count):
row = sheet.row_values(row_index)
position = Position.objects.filter(code=row[8],end__gt=datetime.date.today()).all()[0]
username = row[10]
email = row[11]
password = row[4][-6:]
if position is None:
raise Exception(u'职员%s-%s未分配岗位,或者您选择的岗位已失效,不可被引用'%(row[0],row[1]))
try:
employee = Employee.objects.get(code=row[0])
if employee.position.code == row[8]:
continue
else:
employee.position = position
employee.save()
except Exception,e:
employee = Employee.objects.create(code=row[0],name=row[1],pinyin=row[2],gender=row[3],idcard=row[4],
birthday=row[5],workday=row[6],startday=row[7],position=position)
if username:
try:
user = User.objects.get_by_natural_key(username)
except Exception,e:
user = User.objects.create_user(username=username,password=password)
user.is_staff = True
user.is_active = True
user.first_name = row[1]
if email:
user.email = email
if group:
user.groups.add(group)
user.save()
employee.user = user
employee.save()
class UserHandler(Handler):
"""
基础数据导入:用户
"""
name = 'admin.user'
def handle(self,obj,f):
from django.contrib.auth.models import User,Group
if f and f.name.endswith('.xls'):
path = os.path.join(settings.MEDIA_ROOT,f.name)
workbook = xlrd.open_workbook(path)
sheet = workbook.sheet_by_index(0)
row_count = sheet.nrows
try:
group = Group.objects.get_by_natural_key(u'职员')
except Exception,e:
pass
for row_index in range(2,row_count):
row = sheet.row_values(row_index)
username = row[0]
password = row[1]
last_name = row[2]
first_name = row[3]
email = row[4]
if username == '':
continue
try:
user = User.objects.get_by_natural_key(username)
except Exception,e:
user = User.objects.create_user(username=username,password=password,email=email)
user.is_staff = True
user.is_active = True
user.last_name = last_name
user.first_name = first_name
if group:
user.groups.add(group)
user.save()
class ExcelManager(object):
"""
"""
handlers = {}
def __init__(self):
ExcelManager.register(OPSHandler)
ExcelManager.register(UserHandler)
@classmethod
def register(cls,handler):
if cls.handlers.get(handler.name):
raise Exception('%s already exists,register failed'%handler.name)
if issubclass(handler,Handler):
ExcelManager.handlers[handler.name] = handler()