一段曾经处理datetime的代码
前记:主要是数据库存储记录时一个属性是以"2019-01"这样的年月进行存储的,当需要根据A年月到B年月取出相关记录时,filter()直接range()是不行的,不是数值区间或者日期区间,这时需要字符串转日期转字符串,同时字符串"2019-1"要转为"2019-01"
工资汇总--展示
def total_salary(request): # 工资汇总,传入'2019-01 - 2019-02'
form = forms.total_salary(request.GET)
if form.is_valid():
# year_start = form.cleaned_data["yymm_range"].split(" ")[0].split("-")[0]
# month_start = form.cleaned_data["yymm_range"].split(" ")[0].split("-")[1]
# yymm_start = str(year_start) + '-' + str(month_start)
# year_final = form.cleaned_data["yymm_range"].split(" ")[2].split("-")[0]
# month_final = form.cleaned_data["yymm_range"].split(" ")[2].split("-")[1]
# yymm_final = str(year_final) + '-' + str(month_final)
# start = datetime.datetime(int(year_start), int(month_start), 1) # 格式化日期时间,但是give_time不是格式化为datetime的数据,只是类似“2019-01”
# final = datetime.datetime(int(year_final), int(month_final), 1)
start = form.cleaned_data['yymm_range'].split(" ")[0]
final = form.cleaned_data['yymm_range'].split(" ")[2]
start_datetime = datetime.datetime.strptime(start, '%Y-%m')
final_datetime = datetime.datetime.strptime(final, '%Y-%m')
ret_list = libs.get_month_range(start_datetime, final_datetime) # 用datetime化了的起末时间取出中间年月并格式化为字符串的列表
my_list = list() # ['2019-1','2019-2']没有0啊,而数据库存的时候give_time的2019年1月是以'2019-01'形式存储。
for i in ret_list:
if len(i) == 6:
my_list.append(i.split('-')[0] + '-0' + i.split('-')[1])
else:
my_list.append(i)
range_salary = models.Salary.objects.filter(give_time__in=my_list) # 提取出日期范围内的薪水记录
# range_salary = models.Salary.objects.filter(Q(give_time__contains=start)|Q(give_time__contains=final)) # 同上
# 对于give_time,目前初定为2019-01形式,具体到日这里则需要模糊查询
# staff_start_1 = staff_fina_l = sb1 = zfgjj1 = gh1 = kq1 = sd1 = gs1 = yf1 = sf1 = 0 # 声明常量,可以get不到取0
range_salary1 = range_salary.filter(staff__department__in=[1, 4])
staff1 = models.Salary.objects.filter(staff__department__in=[1, 4])
staff_start_1 = staff1.filter(give_time=start).values("staff").distinct().count()
staff_fina_l = staff1.filter(give_time=final).values("staff").distinct().count()
# yf1 = range_salary1.filter(item__type=1).values("give_time").annotate(yfsum=Sum(u'money'))[0]['yfsum']
# sb1 = range_salary1.filter(item__name=u"社保").values("give_time").annotate(yfsum=Sum(u'money'))[0]['yfsum']
# zfgjj1 = range_salary1.filter(item__name=u"住房公积金").values("give_time").annotate(yfsum=Sum(u'money'))[0][
# 'yfsum']
# kq1 = range_salary1.filter(item__name=u"考勤").values("give_time").annotate(yfsum=Sum(u'money'))[0]['yfsum']
# sd1 = range_salary1.filter(item__name=u"水电").values("give_time").annotate(yfsum=Sum(u'money'))[0]['yfsum']
# gh1 = range_salary1.filter(item__name=u"工会").values("give_time").annotate(yfsum=Sum(u'money'))[0]['yfsum']
# gs1 = range_salary1.filter(item__name=u"税").values("give_time").annotate(yfsum=Sum(u'money'))[0]['yfsum']
yf1 = range_salary1.filter(item__type=1).aggregate(yf=Sum('money'))['yf']
if not yf1:
yf1 = 0
sb1 = range_salary1.filter(item__name='社保').aggregate(sb=Sum('money'))['sb']
if not sb1:
sb1 = 0
zfgjj1 = range_salary1.filter(item__name="住房公积金").aggregate(zf=Sum('money'))['zf']
if not zfgjj1:
zfgjj1 = 0
kq1 = range_salary1.filter(item__name='考勤').aggregate(yf=Sum('money'))['yf']
if not kq1:
kq1 = 0
sd1 = range_salary1.filter(item__name='水电').aggregate(sd=Sum('money'))['sd']
if not sd1:
sd1 = 0
gh1 = range_salary1.filter(item__name='工会').aggregate(gh=Sum('money'))['gh']
if not gh1:
gh1 = 0
gs1 = range_salary1.filter(item__name='税').aggregate(gs=Sum('money'))['gs']
if not gs1:
gs1 = 0
sf1 = yf1 - sb1 - zfgjj1 - kq1 - sd1 - gh1 - gs1
# staff_start_2 = staff_fina_2 = sb2 = zfgjj2 = gh2 = kq2 = sd2 = gs2 = yf2 = sf2 = 0
range_salary2 = range_salary.filter(staff__department__in=[2, 3])
staff2 = models.Salary.objects.filter(staff__department__in=[2, 3])
# staff_start_2 = staff2.filter(give_time=start).values("staff").distinct().count()
# staff_fina_2 = staff2.filter(give_time=final).values("staff").distinct().count()
# yf2 = range_salary2.filter(item__type=1).values("give_time").annotate(yfsum=Sum(u'money'))[0]['yfsum']
# sb2 = range_salary2.filter(item__name=u"社保").values("give_time").annotate(yfsum=Sum(u'money'))[0]['yfsum']
# zfgjj2 = range_salary2.filter(item__name=u"住房公积金").values("give_time").annotate(yfsum=Sum(u'money'))[0][
# 'yfsum']
# kq2 = range_salary2.filter(item__name=u"考勤").values("give_time").annotate(yfsum=Sum(u'money'))[0]['yfsum']
# sd2 = range_salary2.filter(item__name=u"水电").values("give_time").annotate(yfsum=Sum(u'money'))[0]['yfsum']
# gh2 = range_salary2.filter(item__name=u"工会").values("give_time").annotate(yfsum=Sum(u'money'))[0]['yfsum']
# gs2 = range_salary2.filter(item__name=u"税").values("give_time").annotate(yfsum=Sum(u'money'))[0]['yfsum']
staff_start_2 = staff2.filter(give_time=start).values("staff").distinct().count()
if not staff_start_2:
staff_start_2 = 0
staff_fina_2 = staff2.filter(give_time=final).values("staff").distinct().count()
if not staff_fina_2:
staff_fina_2 = 0
yf2 = range_salary2.filter(item__type=1).aggregate(yfsum=Sum('money'))['yfsum']
if not yf2:
yf2 = 0
sb2 = range_salary2.filter(item__name="社保").aggregate(sb=Sum('money'))['sb']
if not sb2:
sb2 = 0
zfgjj2 = range_salary2.filter(item__name=u"住房公积金").aggregate(zf=Sum(u'money'))['zf']
if not zfgjj2:
zfgjj2 = 0
kq2 = range_salary2.filter(item__name="考勤").aggregate(kq=Sum('money'))['kq']
if not kq2:
kq2 = 0
sd2 = range_salary2.filter(item__name="水电").aggregate(sd=Sum('money'))['sd']
if not sd2:
sd2 = 0
gh2 = range_salary2.filter(item__name="工会").aggregate(gh=Sum('money'))['gh']
if not gh2:
gh2 = 0
gs2 = range_salary2.filter(item__name="税").aggregate(gs=Sum('money'))['gs']
if not gs2:
gs2 = 0
sf2 = yf2 - sb2 - zfgjj2 - kq2 - sd2 - gh2 - gs2
# 后勤人员工资
dict_administration = dict()
dict_administration["row"] = 1
dict_administration["项目"] = u"后勤工资"
dict_administration["开始人数"] = staff_start_1
dict_administration["最终人数"] = staff_fina_l
dict_administration["应发金额"] = yf1
dict_administration["代扣社保"] = sb1
dict_administration["代扣住房公积金"] = zfgjj1
dict_administration["工会"] = gh1
dict_administration["考勤"] = kq1
dict_administration["水电"] = sd1
dict_administration["个税"] = gs1
dict_administration["实发金额"] = sf1
# 教师工资
dict_teacher = dict()
dict_teacher["row"] = 2
dict_teacher["项目"] = u'教师工资'
dict_teacher["开始人数"] = staff_start_2
dict_teacher["最终人数"] = staff_fina_2
dict_teacher["应发金额"] = yf2
dict_teacher["代扣社保"] = sb2
dict_teacher["代扣住房公积金"] = zfgjj2
dict_teacher["工会"] = gh2
dict_teacher["考勤"] = kq2
dict_teacher["水电"] = sd2
dict_teacher["个税"] = gs2
dict_teacher["实发金额"] = sf2
# 总工资
dict_all = dict()
dict_all["row"] = 3
dict_all["项目"] = u'总工资'
dict_all["开始人数"] = staff_start_1 + staff_start_2
dict_all["最终人数"] = staff_fina_l + staff_fina_2
dict_all["应发金额"] = yf1 + yf2
dict_all["代扣社保"] = sb1 + sb2
dict_all["代扣住房公积金"] = zfgjj1 + zfgjj2
dict_all["工会"] = gh1 + gh2
dict_all["工会"] = gh1 + gh2
dict_all["考勤"] = kq1 + kq2
dict_all["水电"] = sd1 + sd2
dict_all["个税"] = gs1 + gs2
dict_all["实发金额"] = sf1 + sf2
json_dict = dict()
json_list = list()
json_list.append(dict_administration)
json_list.append(dict_teacher)
json_list.append(dict_all)
json_dict["code"] = "ok"
json_dict["msg"] = "查询汇总成功"
json_dict["data"] = json_list
return HttpResponse(json.dumps(json_dict), content_type='application/json')
else:
# logger.info(u'提交数据错误')
e = ','.join([form.errors[i][0] for i in form.errors]) if len(form.errors) > 0 else u'未知错误'
return HttpResponseBadRequest(json.dumps({'code': 'false', 'msg': e, 'data': []}),
content_type='application/json')
def get_month_range(start_day, end_day): # 取时间段内所有年月,时间模块的各种用法
months = (end_day.year - start_day.year) * 12 + end_day.month - start_day.month
month_range = ['%s-%s' % (start_day.year + mon // 12, mon % 12 + 1)
for mon in range(start_day.month - 1, start_day.month + months)]
return month_range
一段曾经处理datetime的代码的更多相关文章
- 一段显示隐藏列表HTML代码
一段显示隐藏列表HTML代码, 技巧在于把页面上的元素(“返回首页”)和控制显示/隐藏的元素(id=navs-menu)放在一个共同的div上,并在该div上绑定onmouseover和onmouse ...
- 21 段实用便捷的 PHP 代码
PHP 是目前使用最广泛的基于 Web 的编程语言,驱动着数以百万计的网站,其中也包括如 Facebook 等一些大型站点.这里收集了 21 段实用便捷的 PHP 代码摘录,对每种类型的 PHP 开发 ...
- 一段发工资的shell代码
人事发工资条之前是一个个截图发到我们的邮箱里,看人事妹纸是一个善良而又美丽的姑凉,于是乎写了一段shell代码实现批量发短信至各个手机号.不多说了,上代码,其实很简单,我都不好意思上传,还是记录下吧, ...
- Longest Valid Parentheses 每每一看到自己的这段没通过的辛酸代码
Longest Valid Parentheses My Submissions Question Solution Total Accepted: 47520 Total Submissions: ...
- [javascript]一段焦点图的js代码
<html> <head> <meta name="name" content="content"charset="ut ...
- 高特权级代码段转向低特权级代码段(利用 ret(retf) 指令实现 jmp from ring0 to ring3)
[0]写在前面 0.1)本代码旨在演示 从 ring0 转移到 ring3(即,从高特权级 转移到 低特权级) 0.2)本文 只对 与 门相关的 代码进行简要注释,言简意赅: 0.3)文末的个人总结是 ...
- 一段防盗连的PHP代码
$ADMIN[defaulturl] = http://www.163.com/404.htm; //盗链返回的地址 $okaysites = array("http://www.163 ...
- 一段处理百分数的js代码
function percent(s, e, i){ s = Number(s), isNaN(s) && (s = "0"); var n = "%&q ...
- java的一段对象数据类型映射的代码
try { List<GateMetaPO> listGateInfoPO = majorGateReaderService.queryForAggregateBy( chapter); ...
随机推荐
- 【立体几何】分类讨论很细节 Gym - 101967I Путешествие по тору
http://codeforces.com/gym/101967/attachments 题意:定义了一个甜甜圈.(torus) 不是让你二重积分啦233 现在有一个星球是甜甜圈形状的,它有四条很关键 ...
- H/s:哈希率单位转换
哈系率说明 挖矿能力是通过寻找矿工可以执行的地块的尝试次数来衡量的.每次尝试都包括创建一个唯一的块候选项,并通过SHA-256d(一种加密哈希函数)创建块候选项的摘要.或者,简而言之,哈希.由于这是一 ...
- Java ee第一周的作业
这学期目标:对Java ee 进行一定程度的学习,希望最后自己能尽可能掌握Java ee的知识 企业及应用的特点:企业级的应用通常比较庞大,而且其中的数据需要保密. Java ee 框架图
- 深入浅出Vue基于“依赖收集”的响应式原理(转)
add by zhj: 文章写的很通俗易懂,明白了Object.defineProperty的用法 原文:https://zhuanlan.zhihu.com/p/29318017 每当问到VueJS ...
- bugfree3.0.1-修改“优先级”“严重等级”为中文
1.进入目录C:\xampp\htdocs\bugfree\protected\models 2.打开文件 Info.php
- java框架之Spring(4)-Spring整合Hibernate和Struts2
准备 导包 Struts2 导入 Struts2 zip 包解压目录下 'apps/struts-blank.war' 中所有 jar 包,如下: asm-3.3.jar asm-commons-3. ...
- 异常分类VS垃圾分类
异常分类VS垃圾分类 容易快速判断出是什么业务异常,容易对不同的异常进行不同的处理,容易很快找到对应的解决方法
- Linux平台 Oracle 18c RAC安装Part3:DB配置
四.DB(Database)配置 4.1 解压DB的安装包 4.2 DB软件配置 4.3 ASMCA创建磁盘组 4.4 DBCA建库 4.5 验证crsctl的状态 Linux平台 Oracle 18 ...
- js前端使用jOrgChart插件实现组织架构图的展示
项目要做组织架构图,要把它做成自上而下的树形结构. 需要购买阿里云产品的,可以点击此链接购买,有红包优惠哦: https://promotion.aliyun.com/ntms/yunparter/i ...
- C# 获取 mp3文件信息【包括:文件大小、歌曲长度、歌手、专辑】
C# 获取 mp3文件信息[包括:文件大小.歌曲长度.歌手.专辑] 第一种方式:[代码已验证] // http://bbs.csdn.net/topics/390392612 string fil ...