Внесены изменения в модель. Добавлено расписание. Реализован вывод информации о заказах н/з от посещаемости. Реализовано отображение всех дней месяца

This commit is contained in:
Anastasia
2015-05-31 18:20:00 +05:00
parent beb04bc693
commit 89834caf1c
10 changed files with 97 additions and 42 deletions

View File

@@ -7,6 +7,7 @@ from asuzr.models import ProdPlan
from asuzr.models import AccessProtocol
from asuzr.models import OrderPlan
from asuzr.models import Attendance
from asuzr.models import Schedule
# Register your models here.
#admin.site.register(Product)
@@ -19,6 +20,7 @@ admin.site.register(Action)
admin.site.register(ProdPlan)
admin.site.register(AccessProtocol)
admin.site.register(OrderPlan)
admin.site.register(Schedule)
class AttendAdmin(admin.ModelAdmin):
list_display=('date', 'calls', 'visits')
admin.site.register(Attendance, AttendAdmin)

19
asuzr/common.py Normal file
View File

@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from datetime import date
class custom_date(date):
day_names = ("Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье")
day_colors = ("FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF","#FFE4E1", "#FFE4E1")
@property
def weekday_name(self):
return self.day_names[self.weekday()]
@property
def weekday_color(self):
return self.day_colors[self.weekday()]
@property
def date_dd_mm_yy(self):
return self.strftime("%d/%m/%Y")

View File

@@ -5,12 +5,6 @@ from django.db import models
from django.contrib.auth.models import User
from datetime import date, timedelta
# Create your models here.
#Соответствие названий и номеров дней недели
class Common:
day_names = ("Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье")
day_colors = ("FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF","#FFE4E1", "#FFE4E1")
#Изделия
class Product(models.Model):
name = models.CharField(max_length=150)
@@ -19,6 +13,14 @@ class Product(models.Model):
def __unicode__(self):
return self.name
#График работы
class Schedule(models.Model):
date = models.DateField()
designer = models.ForeignKey(User)
def __unicode__(self):
return ', '.join((self.date.strftime('%d %b %Y'), self.designer.first_name,))
#Таблица посещаемости
class Attendance(models.Model):
date = models.DateField()
@@ -33,18 +35,6 @@ class Attendance(models.Model):
def date_as_tuple(self):
return tuple(self.date_dd_mm_yy().split("/"))
@property
def week_day(self):
day_number = self.date.weekday()
day_name = Common.day_names[day_number]
return day_name
@property
def day_color(self):
day_number = self.date.weekday()
color = Common.day_colors[day_number]
return color
@property
def order_count(self):
return Order.objects.filter(date=self.date).count()
@@ -55,6 +45,10 @@ class Attendance(models.Model):
day_price = sum(o.price for o in orders)
return day_price
#Статьи затрат
class CostItem(models.Model):
name = models.CharField(max_length=150)
default_item = models.BooleanField(default=False)
#Заказы
class Order(models.Model):
@@ -68,12 +62,13 @@ class Order(models.Model):
lifting = models.BooleanField(default=False) #подъем
paid = models.DecimalField(max_digits=12, decimal_places=2) #оплачено
approved = models.DateTimeField(null=True, blank = True) #согласовано
executor = models.ForeignKey(User, related_name='+') #id исполнителя
executor = models.ForeignKey(User, null = True, blank = True, related_name='+') #id исполнителя
is_done = models.BooleanField(default=False) #сдан
calls = models.TextField(null=True, blank = True) #обзвон
contact = models.CharField(max_length=150, null=True, blank = True) #контактное лицо
phone_num = models.CharField(max_length=150,null=True, blank = True) #контактный телефон
cancelled = models.BooleanField(default=False) #отменен
cost_items = models.ManyToManyField(CostItem, through='OrderCosts') #статьи затрат
def __unicode__(self):
return ', '.join((self.date.strftime('%d %b %Y'), self.product.name, self.address))
@@ -130,7 +125,14 @@ class AccessProtocol(models.Model):
#План заказов
class OrderPlan(models.Model):
date = models.DateField()
plan = models.IntegerField()
plan = models.DecimalField(max_digits=12, decimal_places=2)
def __unicode__(self):
return self.date.strftime('%B %Y')
# Затраты по заказам
class OrderCosts(models.Model):
order = models.ForeignKey(Order)
cost_item = models.ForeignKey(CostItem)
value = models.DecimalField(max_digits=12, decimal_places=2)
formula = models.CharField(max_length=150)

View File

@@ -5,10 +5,11 @@ from asuzr.models import Product
from asuzr.models import Attendance
from asuzr.models import Order
from asuzr.models import OrderPlan
from datetime import datetime, date
from asuzr.models import Schedule
from datetime import datetime, date, timedelta
import calendar
from django.db.models import Count, Sum
# Create your views here.
from asuzr.common import custom_date
def prod_list(request):
product_list = Product.objects.all()
@@ -37,35 +38,62 @@ def get_orders_by_date(dt):
def main(request, day, month, year):
d,m,y=int(day),int(month), int(year)
attend_list = Attendance.objects.all().order_by('date')
filtered_attend_list=get_filtered_list(attend_list, year, month)
p_date = datetime.strptime(day+'/'+month+'/'+year, '%d/%m/%Y')
order_list = Order.objects.filter(date=p_date).order_by('id')
month_order_list=Order.objects.filter(date__range=(date(y,m,1),date(y,m,calendar.monthrange(y,m)[1]))).values('date').annotate(Count('product'),Sum('price'))
plan = OrderPlan.objects.all()
filtered_plan = get_filtered_list(plan, year, month)
month_plan=0
if len(filtered_plan) > 0:
month_plan=filtered_plan[0].plan
schedule = Schedule.objects.all().order_by('date')
filtered_schedule = get_filtered_list(schedule, year, month)
month_days={i: {'date': custom_date(int(year),int(month),i)} for i in range(1,calendar.monthrange(int(year),int(month))[1]+1)}
for l in filtered_attend_list:
month_days[l.date.day]['attend']=l
for s in filtered_schedule:
if 'designers' in month_days[s.date.day]:
des=', '.join((month_days[s.date.day]['designers'], ' '.join((s.designer.first_name, s.designer.last_name))))
month_days[s.date.day]['designers'] = des
else:
month_days[s.date.day]['designers'] = ' '.join((s.designer.first_name, s.designer.last_name))
for order in month_order_list:
month_days[order['date'].day]['orders_count'] = order['product__count']
month_days[order['date'].day]['orders_price'] = order['price__sum']
month_days_values = month_days.values()
sum_calls = sum(l.calls for l in filtered_attend_list)
sum_visits = sum(l.visits for l in filtered_attend_list)
sum_orders = sum(l.order_count for l in filtered_attend_list)
sum_price = sum(l.orders_price for l in filtered_attend_list)
sum_orders = sum(l['orders_count'] for l in month_days_values if 'orders_count' in l)
sum_price = sum(l['orders_price'] for l in month_days_values if 'orders_price' in l)
sum_order_price = sum(l.price for l in order_list)
plan_balance = filtered_plan[0].plan-sum_price
plan_balance = month_plan-sum_price
d_date = p_date.strftime("%d/%m/%Y")
t = loader.get_template('asuzr/attend_order.html')
c = Context({
'attend_list': filtered_attend_list,
'attend_list': month_days_values,
'order_list': order_list,
'sum_calls': sum_calls,
'sum_visits': sum_visits,
'sum_orders': sum_orders,
'sum_price': sum_price,
'sum_order_price': sum_order_price,
'plan': filtered_plan[0],
'plan': month_plan,
'balance': plan_balance,
'd_date': d_date,
})
@@ -90,7 +118,7 @@ def desreport(request):
sdate = datetime.strptime(start_date, '%d.%m.%y')
end_date = request.GET.get('edate', date.today().strftime('%d.%m.%y'))
edate = datetime.strptime(end_date, '%d.%m.%y')
des_list = Order.objects.filter(cancelled=False, date__range=(sdate,edate)).values('designer__first_name').annotate(Sum('price'),Count('designer'))
des_list = Order.objects.filter(cancelled=False, date__range=(sdate,edate)).values('designer__first_name','designer__last_name').annotate(Sum('price'),Count('designer'))
t=loader.get_template('asuzr/desreport.html')
c=Context({
'des_list' : des_list,
@@ -102,3 +130,4 @@ def desreport(request):

View File

@@ -4,9 +4,9 @@
{% block page %}
<table WIDTH="100%">
<TR VALIGN=top>
<TD WIDTH="40%">{% include 'asuzr/attendance.html' %}</TD>
<TD WIDTH="50%">{% include 'asuzr/attendance.html' %}</TD>
<TD WIDTH="5%"></TD>
<TD WIDTH="55%">{% include 'asuzr/orders_detail.html' %}</TD>
<TD WIDTH="45%">{% include 'asuzr/orders_detail.html' %}</TD>
</TR>
</table>
{% include 'asuzr/plan_balance.html' %}

View File

@@ -8,15 +8,17 @@
<TH>Посещения</TH>
<TH>Заказы</TH>
<TH>Стоимость</TH>
<TH>Дизайнеры</TH>
</TR>
{% for attend in attend_list %}
<TR bgcolor={{attend.day_color}}>
<TD>{{ attend.date_dd_mm_yy}}</TD>
<TD>{{ attend.week_day}}</TD>
<TD>{{ attend.calls }}</TD>
<TD>{{ attend.visits }}</TD>
<TD><a href="{% url 'asuzr-main' attend.date.day attend.date.month attend.date.year %}">{{ attend.order_count}}</a></TD>
<TR bgcolor={{attend.date.weekday_color}}>
<TD>{{ attend.date.date_dd_mm_yy}}</TD>
<TD>{{ attend.date.weekday_name}}</TD>
<TD>{{ attend.attend.calls }}</TD>
<TD>{{ attend.attend.visits }}</TD>
<TD><a href="{% url 'asuzr-main' attend.date.day attend.date.month attend.date.year %}">{{ attend.orders_count}}</a></TD>
<TD>{{ attend.orders_price}}</TD>
<TD>{{ attend.designers}}</TD>
</TR>
{% endfor %}
<TR>
@@ -25,9 +27,10 @@
<TD>{{sum_visits}}</TD>
<TD>{{sum_orders}}</TD>
<TD>{{sum_price}}</TD>
<TD></TD>
</TR>
</ul>
{% else %}
<p>Список изделий пуст</p>
<p>Список пуст</p>
{% endif %}
</TABLE>

View File

@@ -13,7 +13,7 @@
</TR>
{% for des in des_list %}
<TR>
<TD>{{des.designer__first_name}}</TD>
<TD>{{des.designer__first_name}} {{des.designer__last_name}}</TD>
<TD>{{des.designer__count}}</TD>
<TD>{{des.price__sum}}</TD>
</TR>

View File

@@ -36,7 +36,7 @@
<TD>{{ order.ostatok }}</TD>
<TD>{%if order.approved%} {{ order.approved_date }} {%else%} Нет {% endif %}</TD>
<TD>{{order.sketch.sketch_file}}</TD>
<TD>{{ order.executor.first_name }}</TD>
<TD>{{ order.executor.first_name }} {{ order.executor.last_name }}</TD>
<TD>{%if order.is_done%} Да {%else%} Нет {% endif %}</TD>
{% if archive %} <TD {% if order.calls_color%} bgcolor='FFFACD' {% endif %}>{{ order.calls}}</TD> {% endif %}
</TR>

View File

@@ -14,7 +14,7 @@
<TD>{{ order.product.name }}</TD>
<TD>{{ order.price }}</TD>
<TD>{{ order.address }}</TD>
<TD>{{ order.designer.first_name }}</TD>
<TD>{{ order.designer.first_name}} {{order.designer.last_name}}</TD>
<TD>{{ order.deadline_dmy }}</TD>
</TR>
{% endfor %}

View File

@@ -3,7 +3,7 @@
<ul>
<TR>
<TD>ПЛАН</TD>
<TD>{{ plan.plan }}</TD>
<TD>{{ plan }}</TD>
</TR>
<TR>
<TD>Осталось до выполнения</TD>