import xlwt
import time
import xlrd
from xlutils.copy import copy
import logging
logger =logging.getLogger()
logger.setLevel("DEBUG")
#流处理,控制输出到控制台
stream_handle = logging.StreamHandler()
#设置文件handler
file_handler = logging.FileHandler("my.log", mode='a', encoding="utf8")
logger.addHandler(file_handler)
logger.addHandler(stream_handle)
#格式化
formatter = logging.Formatter(fmt='%(asctime)s - %(levelname)s  - %(message)s')
file_handler.setFormatter(formatter)
stream_handle.setFormatter(formatter)

class Worker():
    def __init__(self, worker_num, worker_name, worker_message, position_salary, start_time, end_time):
        self.worker_num = worker_num
        self.worker_name = worker_name
        self.worker_message = worker_message
        self.position_salary = position_salary
        self.start_time = start_time
        self.end_time = end_time


class Finace():
    def write_excel(list_all):
        book = xlwt.Workbook()
        sheet = book.add_sheet('员工工资计算')
        row0 = ['员工编号', '工资结算时间', '员工姓名', '员工基本信息', '岗位', '工资', '说明', '工资总计']
        #写表头
        for i in range(len(row0)):
            sheet.write(0, i, row0[i])
        row_num = 1
        for c in list_all:
            col_num = 0
            for s in c:
                sheet.write(row_num, col_num, s)
                col_num += 1
            row_num += 1

        book.save('员工工资计算.xls')

    def write_excel_append(path, listall):
        index = len(listall)  # 获取需要写入数据的行数
        workbook = xlrd.open_workbook(path)  # 打开工作簿
        worksheet = workbook.sheet_by_name('员工工资计算')
        rows_old = worksheet.nrows  # 获取表格中已存在的数据的行数
        new_workbook = copy(workbook)  # 将xlrd对象拷贝转化为xlwt对象
        new_worksheet = new_workbook.get_sheet(0)  # 获取转化后工作簿中的第一个表格
        for i in range(0, index):
            for j in range(0, len(listall[i])):
                new_worksheet.write(i + rows_old, j, listall[i][j])  # 追加写入数据,注意是从i+rows_old行开始写入
        new_workbook.save(path)  # 保存工作簿
        logger.info("xls格式表格【追加】写入数据成功!")

    def calc_salary(worker):
        list_all = []
        list_posi = []
        list_sa_base =[]
        start_sec = time.mktime(time.strptime(worker.start_time, '%Y-%m-%d'))
        end_sec = time.mktime(time.strptime(worker.end_time, '%Y-%m-%d'))
        worker_time = (int((end_sec - start_sec)/(24*60*60))) // 7
        logger.info(worker_time)
        for l in worker.position_salary:
            for key in l.keys():
                posi = key
            list_posi.append(posi)
            for value in l.values():
                sa_base = int(value) * worker_time
            list_sa_base.append(sa_base)
        logger.info(list_posi)
        logger.info(list_sa_base)
        s_total = 0
        for i in range(len(list_posi)):
            list_content = []
            list_content.append(worker.worker_num)
            list_content.append('2019-1')
            list_content.append(worker.worker_name)
            list_content.append(worker.worker_message)
            list_content.append(list_posi[i])
            list_content.append(list_sa_base[i])
            list_content.append('工资结算4周')
            s_total += list_sa_base[i]
            list_content.append(s_total)
            list_all.append(list_content)
        logger.info(list_all)
        return list_all


worker = Worker(1, '小A', '住在回龙观', [{"程序员": 2000}, {"扫地": 1000}], '2019-01-01', '2019-01-31')
re = Finace.calc_salary(worker)
print(re)
Finace.write_excel(re)
worker = Worker(1, '小B', '居住在天通苑', [{"程序员": 2000}], '2019-01-01', '2019-01-31')
re = Finace.calc_salary(worker)
Finace.write_excel_append('/home/yanjun/1-homework-yanjun/9-homework-yanjun/员工工资计算.xls', re)
worker = Worker(1, '小c', '居住在西二旗', [{"程序员": 2000}], '2019-01-01', '2019-01-31')
re = Finace.calc_salary(worker)
Finace.write_excel_append('/home/yanjun/1-homework-yanjun/9-homework-yanjun/员工工资计算.xls', re)
worker = Worker(1, '小D', '居住在天通苑', [{"程序员": 2000}], '2019-01-01', '2019-01-31')
re = Finace.calc_salary(worker)
Finace.write_excel_append('/home/yanjun/1-homework-yanjun/9-homework-yanjun/员工工资计算.xls', re)