临时sifee

自己编制的sifee小程序,这是py主程序代码。

代码没有瘦身,仍有很多练习、测试用的废码。

代码仅作为自己学习、记录之用。

# -*- coding: utf-8 -*-

"""
Module implementing SIFT.
"""
import sqlite3
from PyQt5.QtCore import pyqtSlot
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtWidgets import QDialog
from PyQt5.QtWidgets import   QTableWidget, QTableWidgetItem
from Ui_sifee import Ui_SIFT
import datetime
import csv
listx, listy, listya, listyb, listyc, listyd=[],[],[],[],[],[]#绘图x轴、y轴数组数据


class SIFT(QDialog, Ui_SIFT):
    """
    Class documentation goes here.
    """
    def __init__(self, parent=None):
        """
        Constructor
        
        @param parent reference to the parent widget
        @type QWidget
        """
        super(SIFT, self).__init__(parent)
        self.setupUi(self)

    @pyqtSlot()
    def on_pBtn_calculate_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        #--------------------表头列名
        self.tableWidget_detail.clear()
        self.tableWidget_detail.setRowCount(0)
        self.tableWidget_detail.setColumnCount(6)
        date_header=QTableWidgetItem("补缴日期")
        self.tableWidget_detail.setHorizontalHeaderItem(0, date_header)
        date_header=QTableWidgetItem("缴费基数")
        self.tableWidget_detail.setHorizontalHeaderItem(1, date_header)        
        date_header=QTableWidgetItem("滞纳金比例")
        self.tableWidget_detail.setHorizontalHeaderItem(2, date_header)       
        date_header=QTableWidgetItem("单位缴费本金")
        self.tableWidget_detail.setHorizontalHeaderItem(3, date_header)
        date_header=QTableWidgetItem("单位缴费滞纳金")
        self.tableWidget_detail.setHorizontalHeaderItem(4, date_header)
        date_header=QTableWidgetItem("单位缴费总计")
        self.tableWidget_detail.setHorizontalHeaderItem(5, date_header)        
        

        print("点击按钮")
        siwage_scale=int(self.lineEdit_scale.text())/100
        p_end=self.dateEdit_end.date()#补缴结束月
        p_start=self.dateEdit_start.date()#补缴开始月
        vday_start=p_start.day()
        date_overduefee=(p_start.addMonths(1)).addDays(-vday_start+1)#隔月1日开始计算滞纳期开始
        print("滞纳金开始日期:", date_overduefee)
        date_now=p_start.currentDate()#获取当前系统时间
        vmonth_end=p_end.month()
        vmonth_start=p_start.month()
        db_cnn=sqlite3.connect("db_ave_wage.db")#连接SQLite数据库
        cur=db_cnn.cursor()
        resu=cur.execute("select * from t_avewage")
        csvfile_aa=open("数据库历年省平工资.csv", "w", newline="")
        write_aa=csv.writer(csvfile_aa)
        write_aa.writerow(["ID", "日期", "省年平工资", "省月平工资"])
        write_aa.writerows(resu)
        csvfile_aa.close()
        
        
        fee=0
        vcapital=0
        vbase=0
        vcapital_em=0
        fee_em=0
        j=0
        listx.clear()
        listy.clear()
        listya.clear()
        listyb.clear()
        listyc.clear()
        listyd.clear()

        
        csvfile=open("补缴费用明细表.csv", "w", newline='')#创建csv文件
        writer_a = csv.writer(csvfile)
        writer_a.writerow(['补缴月份', '缴费基数', '滞纳比例', '单位缴费本金', '单位滞纳金', '单位缴费合计', '个人缴费本金', '个人滞息(不准)', '费用总计'])      
        #-------------------------------------------while循环
        while date_overduefee<=p_end: 
            
            print("while语句开始")
            #------------------------滞纳费率         
            #从开始补缴月的隔月1月开始计算滞纳金,每天万分之五
            if date_overduefee.year()<1995:vscale=0.0008
            if date_overduefee.year()>=1996 and date_overduefee.year()<=2000:
                vscale=0.0006
            if date_overduefee.year()>2000:vscale=0.0005
            #---------------------补缴月缴费基数参考选定省平工资年度(上年或上上年度)
            print("系统日期月份:", date_now.month(), "补缴年度:", p_start.addMonths(j).year())#验证变量
            #每年7月统计数据出上一年度平均工资,当前月>=8月则使用上一年度社平工资,否则使用上上年度社平工资
            if date_now.month()<=8 and (p_start.addMonths(j)).year()==date_now.year():
                i=2
            else: i=1
            if self.checkBox_2.isChecked():
                i=1
            
            year_new=(p_start.addMonths(j)).year()-i
            print("i:", i, "year_new:", year_new)


            #----------------------------------
            sql="select wage_month from t_avewage where year=%d" %(year_new)
#            squ="CREATE TABLE t_avewage1 ( id  INT    PRIMARY KEY UNIQUE NOT NULL,    year       INT,wage_year  DOUBLE,    wage_month DOUBLE)";
            cur.execute(sql)
            result=cur.fetchall()
            vbase=result[0][0]#河北省职工月均工资

            vdays=date_overduefee.daysTo(date_now)#距今天的天数
            print("滞纳期开始:", date_overduefee, "天数:", vdays, "基数:", vbase)
            fee+=int(vbase*siwage_scale*0.2*vscale*vdays)#滞纳金累加值
            fee_single=int(vbase*siwage_scale*0.2*vscale*vdays)#滞纳金不累加值
            vcapital+=int(vbase*siwage_scale*0.2)#单位缴费本金累加
            vcapital_single=int(vbase*siwage_scale*0.2)#单位缴费本金不累加值
            vcapital_em+=int(vbase*siwage_scale*0.08)#个人承担费用累加值
            vcapital_em_single=int(vbase*siwage_scale*0.08)#个人承担费用不累加值
            fee_em+=int(vbase*siwage_scale*0.08*vscale*vdays)
            fee_em_single=int(vbase*siwage_scale*0.08*vscale*vdays)
            date_overduefee=date_overduefee.addMonths(1)
            print("fee:", fee)
            
            #此北京社保滞纳金计算多计算1个月的滞纳金。如计算2016年4月补缴滞纳金,当前时间2018年4月4日。
            #此系统补缴时间填2018年4月4日,补缴结束时间是2016年5月1日,北京社保补缴时间填2018年5月4日。计算滞纳金同样是245元。
            
            
            #-----------------------填表
            self.tableWidget_detail.setRowCount(j+1)#插行

            date_t=QTableWidgetItem(str(p_start.addMonths(j).toString("yyyy年MM月")))
            wage_t=QTableWidgetItem(str(int(vbase*siwage_scale)))
            scale_t=QTableWidgetItem(str(vscale))
            vcapital_t=QTableWidgetItem(str(vcapital_single))
            fee_t=QTableWidgetItem(str(fee_single))
            sum_t=QTableWidgetItem(str(vcapital_single+fee_single))

            
            self.tableWidget_detail.setItem(j, 0, date_t)
            self.tableWidget_detail.setItem(j, 1, wage_t)
            self.tableWidget_detail.setItem(j, 2, scale_t)
            self.tableWidget_detail.setItem(j, 3, vcapital_t)
            self.tableWidget_detail.setItem(j, 4, fee_t)
            self.tableWidget_detail.setItem(j, 5, sum_t)
            
            
            #--------------write csv file
            lista=[]
            lista.append(str(p_start.addMonths(j).toString("yyyy年MM月")))
            lista.append(str(int(vbase*siwage_scale)))
            lista.append(str(vscale))
            lista.append(str(vcapital_single))
            lista.append(str(fee_single))
            lista.append(str(vcapital_single+fee_single))
            
            lista.append(str(vcapital_em_single))
            lista.append(str(fee_em_single))
            
            lista.append(str(vcapital_single+fee_single+vcapital_em_single+fee_em_single))
                        
            print(lista)
            listx.append(lista[0])
            listy.append(lista[1])
            listya.append(lista[2])
            listyb.append(float(lista[3]))
            listyc.append(float(lista[4]))
            listyd.append(lista[5])

            writer_a.writerow(lista)#如果使用writerows多行写入,则将每一个字符串分割成单个字符。
            #如果writer_a.writerow(str(lista)),则可能是行列转置的效果
            j+=1
        csvfile.close()    

            
            
        #---------------------关数据库    
        cur.close()
        db_cnn.commit()
        db_cnn.close()
        print(fee)
        #---------------------写单行文本框值
        self.lineEdit_capital.setText(str(vcapital))
        self.lineEdit_overduefee.setText(str(fee))
        self.lineEdit_feetotal.setText(str(fee+vcapital))
        self.lineEdit_capital_em.setText(str(vcapital_em))
        self.lineEdit_interest_total.setText(str(fee_em))
        self.lineEdit_feetotal_all.setText(str(fee+vcapital+vcapital_em+fee_em))
        self.lineEdit_person_total.setText(str(vcapital_em+fee_em))
        
        
    @pyqtSlot()
    def on_pushBtn_writelib_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        raise NotImplementedError
    
    @pyqtSlot()
    def on_pBtn_plot_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        import matplotlib as mpl
        import matplotlib.pyplot as plt 
        import numpy as np

#        from pylab import *  
#        from matplotlib.ticker import MultipleLocator, FormatStrFormatter
#        xmajorLocator   = MultipleLocator(20) #将x主刻度标签设置为20的倍数 
#        xmajorFormatter = FormatStrFormatter('%1.1f') #设置x轴标签文本的格式
#        ax = subplot(111) #注意:一般都在ax中设置,不再plot中设置
#        #设置主刻度标签的位置,标签文本的格式
#
#        
        mpl.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
        mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号  
        
        plt.xlabel(u"日期")
        plt.ylabel(u"金额")
        plt.title(u"月度缴费趋势图")
        #plt.grid(True)
        a=tuple(listx)
        a1=np.arange(len(listx))
        yb=tuple(listyb)
        yc=tuple(listyc)
        print(a, yb, yc, type(a))
        plt.xticks(rotation=90)#x轴的tick_label标志旋转90度(x轴文字)
#        dd=np.array([1, 2])#纯属练习,numpy的数组可以相加
#        ss=np.array([2, 7])
#        print(dd+ss)#[3,9]

#        plt.figure(figsize=(10,6))#重开纪绘图窗口

        plt.bar(x= a,height = yb,width = 0.35, align="center", color="red", label = '公司本金金额')
        plt.bar(x= a,height = yc,width = 0.35,  bottom=yb, align="center", tick_label=a, color="blue", label = '滞纳金')

        for i in range(len(listx)):
            plt.text(listx[i], listyb[i]/2, listyb[i], ha="center", va="center", rotation=90)
            plt.text(listx[i], listyc[i]*2/3+listyb[i], listyc[i], ha="center", rotation=90)


        plt.legend()        
        plt.show()
            
            
            
            
            
            

    

        
        
        
        
        
        
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    #ui = QDialog()
    ui=SIFT()
    ui.show()
    sys.exit(app.exec_())
    



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值