Добавлена Производственная таблица
This commit is contained in:
@@ -8,6 +8,9 @@ from asuzr.models import AccessProtocol
|
|||||||
from asuzr.models import OrderPlan
|
from asuzr.models import OrderPlan
|
||||||
from asuzr.models import Attendance
|
from asuzr.models import Attendance
|
||||||
from asuzr.models import Schedule
|
from asuzr.models import Schedule
|
||||||
|
from asuzr.models import OrderCosts
|
||||||
|
from asuzr.models import CostItem
|
||||||
|
|
||||||
|
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
#admin.site.register(Product)
|
#admin.site.register(Product)
|
||||||
@@ -21,6 +24,8 @@ admin.site.register(ProdPlan)
|
|||||||
admin.site.register(AccessProtocol)
|
admin.site.register(AccessProtocol)
|
||||||
admin.site.register(OrderPlan)
|
admin.site.register(OrderPlan)
|
||||||
admin.site.register(Schedule)
|
admin.site.register(Schedule)
|
||||||
|
admin.site.register(OrderCosts)
|
||||||
|
admin.site.register(CostItem)
|
||||||
class AttendAdmin(admin.ModelAdmin):
|
class AttendAdmin(admin.ModelAdmin):
|
||||||
list_display=('date', 'calls', 'visits')
|
list_display=('date', 'calls', 'visits')
|
||||||
admin.site.register(Attendance, AttendAdmin)
|
admin.site.register(Attendance, AttendAdmin)
|
||||||
@@ -50,6 +50,9 @@ class CostItem(models.Model):
|
|||||||
name = models.CharField(max_length=150)
|
name = models.CharField(max_length=150)
|
||||||
default_item = models.BooleanField(default=False)
|
default_item = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
#Заказы
|
#Заказы
|
||||||
class Order(models.Model):
|
class Order(models.Model):
|
||||||
date = models.DateField() #дата
|
date = models.DateField() #дата
|
||||||
@@ -132,7 +135,10 @@ class OrderPlan(models.Model):
|
|||||||
|
|
||||||
# Затраты по заказам
|
# Затраты по заказам
|
||||||
class OrderCosts(models.Model):
|
class OrderCosts(models.Model):
|
||||||
order = models.ForeignKey(Order)
|
order = models.ForeignKey(Order, related_name='+')
|
||||||
cost_item = models.ForeignKey(CostItem)
|
cost_item = models.ForeignKey(CostItem, related_name='+')
|
||||||
value = models.DecimalField(max_digits=12, decimal_places=2)
|
value = models.DecimalField(max_digits=12, decimal_places=2, null=True, blank = True)
|
||||||
formula = models.CharField(max_length=150)
|
formula = models.CharField(max_length=150, null=True, blank = True)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return ', '.join((self.order.product.name, self.cost_item.name))
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ from datetime import datetime, date, timedelta
|
|||||||
import calendar
|
import calendar
|
||||||
from django.db.models import Count, Sum
|
from django.db.models import Count, Sum
|
||||||
from asuzr.common import custom_date
|
from asuzr.common import custom_date
|
||||||
|
from django.contrib.auth.decorators import login_required
|
||||||
|
|
||||||
def prod_list(request):
|
def prod_list(request):
|
||||||
product_list = Product.objects.all()
|
product_list = Product.objects.all()
|
||||||
@@ -99,18 +100,23 @@ def main(request, day, month, year):
|
|||||||
})
|
})
|
||||||
return HttpResponse(t.render(c))
|
return HttpResponse(t.render(c))
|
||||||
|
|
||||||
|
@login_required
|
||||||
def orders (request, archive):
|
def orders (request, archive):
|
||||||
if archive=='0':
|
if archive=='0':
|
||||||
is_done_value=False
|
is_done_value=False
|
||||||
else:
|
else:
|
||||||
is_done_value=True
|
is_done_value=True
|
||||||
|
order_id=request.GET.get('order_id',0)
|
||||||
order_list = Order.objects.filter(is_done=is_done_value).order_by('-id')
|
order_list = Order.objects.filter(is_done=is_done_value).order_by('-id')
|
||||||
|
sel_order = Order.objects.filter(id=order_id)
|
||||||
|
cost_items = sel_order.values('cost_items')
|
||||||
t=loader.get_template('asuzr/orders.html')
|
t=loader.get_template('asuzr/orders.html')
|
||||||
c=RequestContext(request, {
|
c=RequestContext(request, {
|
||||||
'order_list': order_list,
|
'order_list': order_list,
|
||||||
'archive': is_done_value,
|
'archive': is_done_value,
|
||||||
})
|
'sel_order' : sel_order,
|
||||||
|
'cost_items' : cost_items,
|
||||||
|
})
|
||||||
return HttpResponse(t.render(c))
|
return HttpResponse(t.render(c))
|
||||||
|
|
||||||
def desreport(request):
|
def desreport(request):
|
||||||
@@ -120,13 +126,24 @@ def desreport(request):
|
|||||||
edate = datetime.strptime(end_date, '%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','designer__last_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')
|
t=loader.get_template('asuzr/desreport.html')
|
||||||
c=Context({
|
c=RequestContext(request,{
|
||||||
'des_list' : des_list,
|
'des_list' : des_list,
|
||||||
'start_date' : start_date,
|
'start_date' : start_date,
|
||||||
'end_date' : end_date,
|
'end_date' : end_date,
|
||||||
})
|
})
|
||||||
return HttpResponse(t.render(c))
|
return HttpResponse(t.render(c))
|
||||||
|
|
||||||
|
def production_table(request, order_id):
|
||||||
|
order_list = Order.objects.filter(is_done=False).order_by('-id')
|
||||||
|
sel_order = Order.objects.filter(id=order_id)
|
||||||
|
cost_items = sel_order.values('cost_items')
|
||||||
|
t=loader.get_template('asuzr/order_costs.html')
|
||||||
|
c=RequestContext(request,{
|
||||||
|
'order_list' : order_list,
|
||||||
|
'sel_order' : sel_order,
|
||||||
|
'cost_items' : cost_items,
|
||||||
|
})
|
||||||
|
return HttpResponse(t.render(c))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ https://docs.djangoproject.com/en/1.6/ref/settings/
|
|||||||
|
|
||||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||||
import os
|
import os
|
||||||
|
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ INSTALLED_APPS = (
|
|||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
|
'inplaceeditform',
|
||||||
'asuzr'
|
'asuzr'
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -83,3 +85,5 @@ USE_TZ = True
|
|||||||
STATIC_URL = '/static/'
|
STATIC_URL = '/static/'
|
||||||
|
|
||||||
TEMPLATE_DIRS = ('/home/anastasia/projects/django/record/templates/')
|
TEMPLATE_DIRS = ('/home/anastasia/projects/django/record/templates/')
|
||||||
|
|
||||||
|
TEMPLATE_CONTEXT_PROCESSORS += ('django.core.context_processors.request',)
|
||||||
|
|||||||
@@ -10,8 +10,9 @@ urlpatterns = patterns('',
|
|||||||
url(r'^product/$', 'asuzr.views.prod_list'),
|
url(r'^product/$', 'asuzr.views.prod_list'),
|
||||||
url(r'^product/(?P<prod_id>\d+)/$', 'asuzr.views.prod_detail'),
|
url(r'^product/(?P<prod_id>\d+)/$', 'asuzr.views.prod_detail'),
|
||||||
url(r'^main/(?P<day>\d+)/(?P<month>\d+)/(?P<year>\d+)/$', 'asuzr.views.main', name='asuzr-main'),
|
url(r'^main/(?P<day>\d+)/(?P<month>\d+)/(?P<year>\d+)/$', 'asuzr.views.main', name='asuzr-main'),
|
||||||
url(r'^orders/(?P<archive>\d+)/$', 'asuzr.views.orders'),
|
url(r'^orders/(?P<archive>\d+)/$', 'asuzr.views.orders',name='asuzr-orders'),
|
||||||
url(r'^desreport/$', 'asuzr.views.desreport'),
|
url(r'^desreport/$', 'asuzr.views.desreport'),
|
||||||
|
url(r'^production_table/(?P<order_id>\d+)/$', 'asuzr.views.production_table'),
|
||||||
url(r'^admin/', include(admin.site.urls)),
|
url(r'^admin/', include(admin.site.urls)),
|
||||||
url(r'^inplaceeditform/', include('inplaceeditform.urls')),
|
url(r'^inplaceeditform/', include('inplaceeditform.urls')),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -15,8 +15,8 @@
|
|||||||
<TR bgcolor={{attend.date.weekday_color}}>
|
<TR bgcolor={{attend.date.weekday_color}}>
|
||||||
<TD>{{ attend.date.date_dd_mm_yy}}</TD>
|
<TD>{{ attend.date.date_dd_mm_yy}}</TD>
|
||||||
<TD>{{ attend.date.weekday_name}}</TD>
|
<TD>{{ attend.date.weekday_name}}</TD>
|
||||||
<TD>{% inplace_edit "attend.attend.calls" %}</TD>
|
<TD>{{attend.attend.calls}}</TD>
|
||||||
<TD>{% inplace_edit "attend.attend.visits" %}</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><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.orders_price}}</TD>
|
||||||
<TD>{{ attend.designers}}</TD>
|
<TD>{{ attend.designers}}</TD>
|
||||||
|
|||||||
26
templates/asuzr/cost_items.html
Normal file
26
templates/asuzr/cost_items.html
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<TABLE BORDER WIDTH="100%">
|
||||||
|
{% if cost_items %}
|
||||||
|
<ul>
|
||||||
|
<TR>
|
||||||
|
<TH>{{sel_order.product.name}} <br> Комплектующие</TH>
|
||||||
|
<TH>Стоимость <br> {{sel_order.price}}</TH>
|
||||||
|
</TR>
|
||||||
|
{% for item in cost_items %}
|
||||||
|
<TR>
|
||||||
|
<TD>{{ item }}</TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
{% endfor %}
|
||||||
|
<TR>
|
||||||
|
<TD> Итого затрат</TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD> Прибыль</TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
</ul>
|
||||||
|
{% else %}
|
||||||
|
<p> Список пуст</p>
|
||||||
|
{% endif %}
|
||||||
|
</TABLE>
|
||||||
@@ -20,6 +20,6 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>Список заказов пуст</p>
|
<p>Список пуст</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
12
templates/asuzr/order_costs.html
Normal file
12
templates/asuzr/order_costs.html
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{% extends "asuzr/base.html" %}
|
||||||
|
|
||||||
|
{% block title %} Производственная таблица {% endblock %}
|
||||||
|
{% block page %}
|
||||||
|
<table WIDTH="100%">
|
||||||
|
<TR VALIGN=top>
|
||||||
|
<TD WIDTH="50%">{% include 'asuzr/production_table.html' %}</TD>
|
||||||
|
<TD WIDTH="5%"></TD>
|
||||||
|
<TD WIDTH="45%">{% include 'asuzr/cost_items.html' %}</TD>
|
||||||
|
</TR>
|
||||||
|
</table>
|
||||||
|
{% endblock %}
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
<TR>
|
<TR>
|
||||||
<TD>{{ order.date_dmy }}</TD>
|
<TD>{{ order.date_dmy }}</TD>
|
||||||
<TD>{{ order.deadline_dmy }}</TD>
|
<TD>{{ order.deadline_dmy }}</TD>
|
||||||
<TD>{% inplace_edit "order.product.name" %}</TD>
|
<TD>{% inplace_edit "order.product" %}</TD>
|
||||||
<TD>{%if order.delivery%} Да {% else %} Нет {% endif %} </TD>
|
<TD>{%if order.delivery%} Да {% else %} Нет {% endif %} </TD>
|
||||||
<TD>{%if order.lifting%} Да {% else %} Нет {% endif %}</TD>
|
<TD>{%if order.lifting%} Да {% else %} Нет {% endif %}</TD>
|
||||||
<TD>{% inplace_edit "order.address" %}</TD>
|
<TD>{% inplace_edit "order.address" %}</TD>
|
||||||
|
|||||||
22
templates/asuzr/production_table.html
Normal file
22
templates/asuzr/production_table.html
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{% block page %}
|
||||||
|
<TABLE BORDER>
|
||||||
|
{% if order_list %}
|
||||||
|
<ul>
|
||||||
|
<TR>
|
||||||
|
<TH WIDTH="40%">Наименование</TH>
|
||||||
|
<TH>Срок сдачи</TH>
|
||||||
|
<TH>Адрес</TH>
|
||||||
|
</TR>
|
||||||
|
{% for o in order_list %}
|
||||||
|
<TR>
|
||||||
|
<TD>{{o.product.name}}</TD>
|
||||||
|
<TD>{{o.date_dmy}}</TD>
|
||||||
|
<TD>{{o.address}}</TD>
|
||||||
|
</TR>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% else %}
|
||||||
|
<p>Список заказов пуст</p>
|
||||||
|
{% endif %}
|
||||||
|
</table>
|
||||||
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user