diff --git a/.directory b/.directory new file mode 100644 index 0000000..a38b7e4 --- /dev/null +++ b/.directory @@ -0,0 +1,3 @@ +[Dolphin] +Timestamp=2015,4,13,16,48,17 +Version=3 diff --git a/asuzr/__init__.py b/asuzr/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asuzr/__init__.pyc b/asuzr/__init__.pyc new file mode 100644 index 0000000..69efdda Binary files /dev/null and b/asuzr/__init__.pyc differ diff --git a/asuzr/admin.py b/asuzr/admin.py new file mode 100644 index 0000000..df59dc2 --- /dev/null +++ b/asuzr/admin.py @@ -0,0 +1,24 @@ +from django.contrib import admin +from asuzr.models import Product +from asuzr.models import Order +from asuzr.models import Sketch +from asuzr.models import Action +from asuzr.models import ProdPlan +from asuzr.models import AccessProtocol +from asuzr.models import OrderPlan +from asuzr.models import Attendance + +# Register your models here. +#admin.site.register(Product) +class ProductAdmin(admin.ModelAdmin): + list_display=('name', 'prod_period') +admin.site.register(Product, ProductAdmin) +admin.site.register(Order) +admin.site.register(Sketch) +admin.site.register(Action) +admin.site.register(ProdPlan) +admin.site.register(AccessProtocol) +admin.site.register(OrderPlan) +class AttendAdmin(admin.ModelAdmin): + list_display=('date', 'calls', 'visits') +admin.site.register(Attendance, AttendAdmin) \ No newline at end of file diff --git a/asuzr/admin.pyc b/asuzr/admin.pyc new file mode 100644 index 0000000..76624d1 Binary files /dev/null and b/asuzr/admin.pyc differ diff --git a/asuzr/models.py b/asuzr/models.py new file mode 100644 index 0000000..3f55a72 --- /dev/null +++ b/asuzr/models.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from django.db import models +from django.contrib.auth.models import User + +# 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) + prod_period = models.IntegerField()#трудоемкость, дней + +#Таблица посещаемости +class Attendance(models.Model): + date = models.DateField() + calls = models.IntegerField() + visits = models.IntegerField() + + @property + def date_dd_mm_yy(self): + return self.date.strftime("%d/%m/%y") + + @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() + + @property + def orders_price(self): + orders = Order.objects.filter(date=self.date) + day_price = sum(o.price for o in orders) + return day_price + + +#Заказы +class Order(models.Model): + date = models.DateField() #дата + product = models.ForeignKey(Product) #id изделия + price = models.DecimalField(max_digits=12, decimal_places=2) #стоимость + address = models.CharField(max_length=150) #адрес + designer = models.ForeignKey(User, related_name='+') #id дизайнера + deadline = models.DateField() #срок сдачи + delivery = models.BooleanField(default=False) #доставка + 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 исполнителя + 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) #отменен + + @property + def deadline_dmy(self): + return self.deadline.strftime("%d/%m/%y") + +#Эскизы +class Sketch(models.Model): + file_name = models.CharField(max_length=150) #имя файла + file_path = models.CharField(max_length=150) #путь к файу + order = models.ForeignKey(Order) #id заказа + +#Действия +class Action(models.Model): + name = models.CharField(max_length=150) #наименование действия + +#Производственный план +class ProdPlan(models.Model): + start_date = models.DateField() #дата начала + end_date = models.DateField() #дата окончания + order = models.ForeignKey(Order) #id заказа + executor = models.ForeignKey(User) #id исполнителя + action = models.ForeignKey(Action) #id действия + +#Протокол доступа +class AccessProtocol(models.Model): + time = models.DateTimeField() #время + user = models.ForeignKey(User) #id пользователя + event = models.CharField(max_length=150) #действие + +#План заказов +class OrderPlan(models.Model): + month = models.DateField() + plan = models.IntegerField() \ No newline at end of file diff --git a/asuzr/models.pyc b/asuzr/models.pyc new file mode 100644 index 0000000..5da9309 Binary files /dev/null and b/asuzr/models.pyc differ diff --git a/asuzr/tests.py b/asuzr/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/asuzr/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/asuzr/views.py b/asuzr/views.py new file mode 100644 index 0000000..d28a50b --- /dev/null +++ b/asuzr/views.py @@ -0,0 +1,96 @@ +from django.shortcuts import render +from django.http import HttpResponse +from django.template import Context, loader +from asuzr.models import Product +from asuzr.models import Attendance +from asuzr.models import Order +from datetime import datetime, date, time +# Create your views here. + +def prod_list(request): + product_list = Product.objects.all() + t = loader.get_template('asuzr/prod_list.html') + c = Context({ + 'product_list': product_list, + }) + return HttpResponse(t.render(c)) + +def prod_detail(request, prod_id): + return HttpResponse("This is %s" % prod_id) + + +def attend_table(request, year, month): + attend_list = Attendance.objects.all().order_by('date') + filtered_list=[] + for a in attend_list: + a_date = a.date + if a_date.strftime('%m/%Y') == month+'/'+year: + filtered_list.append(a) + + sum_calls = sum(l.calls for l in filtered_list) + sum_visits = sum(l.visits for l in filtered_list) + sum_orders = sum(l.order_count for l in filtered_list) + sum_price = sum(l.orders_price for l in filtered_list) + t = loader.get_template('asuzr/attendance.html') + c = Context({ + 'attend_list': filtered_list, + 'sum_calls': sum_calls, + 'sum_visits': sum_visits, + 'sum_orders': sum_orders, + 'sum_price': sum_price, + }) + return HttpResponse(t.render(c)) + +def orders_table(request, year, month, day): + p_date = datetime.strptime(day+'/'+month+'/'+year, '%d/%m/%Y') + order_list = Order.objects.filter(date=p_date).order_by('id') + sum_price = sum(l.price for l in order_list) + t = loader.get_template('asuzr/orders.html') + c = Context({ + 'order_list': order_list, + 'sum_price': sum_price, + }) + return HttpResponse(t.render(c)) + +def get_filtered_list(p_list, year, month): + filtered_list=[] + for a in p_list: + a_date = a.date + if a_date.strftime('%m/%Y') == month+'/'+year: + filtered_list.append(a) + + return filtered_list + +def get_orders_by_date(dt): + order_list = Order.objects.filter(date=dt).order_by('id') + return order_list + +def attend_order_table(request, year, month): + attend_list = Attendance.objects.all().order_by('date') + filtered_attend_list=get_filtered_list(attend_list, year, month) + + order_list = Order.objects.all().order_by('id') + filtered_order_list = get_filtered_list(order_list, year, month) + + 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_order_price = sum(l.price for l in filtered_order_list) + + t = loader.get_template('asuzr/attend_order.html') + c = Context({ + 'attend_list': filtered_attend_list, + 'order_list': filtered_order_list, + 'sum_calls': sum_calls, + 'sum_visits': sum_visits, + 'sum_orders': sum_orders, + 'sum_price': sum_price, + 'sum_order_price': sum_order_price, + }) + return HttpResponse(t.render(c)) + + + + diff --git a/asuzr/views.pyc b/asuzr/views.pyc new file mode 100644 index 0000000..254769e Binary files /dev/null and b/asuzr/views.pyc differ diff --git a/record/__init__.py b/record/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/record/__init__.pyc b/record/__init__.pyc new file mode 100644 index 0000000..addc66b Binary files /dev/null and b/record/__init__.pyc differ diff --git a/record/settings.py b/record/settings.py new file mode 100644 index 0000000..e7cc877 --- /dev/null +++ b/record/settings.py @@ -0,0 +1,85 @@ +""" +Django settings for record project. + +For more information on this file, see +https://docs.djangoproject.com/en/1.6/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.6/ref/settings/ +""" + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +import os +BASE_DIR = os.path.dirname(os.path.dirname(__file__)) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = ')-s&c_)jnmzoslf=9rnav9qqadd#l$46jt+m51ppu!lril3g89' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +TEMPLATE_DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = ( + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'asuzr' +) + +MIDDLEWARE_CLASSES = ( + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +) + +ROOT_URLCONF = 'record.urls' + +WSGI_APPLICATION = 'record.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.6/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + +# Internationalization +# https://docs.djangoproject.com/en/1.6/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'Asia/Yekaterinburg' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.6/howto/static-files/ + +STATIC_URL = '/static/' + +TEMPLATE_DIRS = ('/home/anastasia/projects/django/record/templates/') diff --git a/record/settings.pyc b/record/settings.pyc new file mode 100644 index 0000000..c38dfe4 Binary files /dev/null and b/record/settings.pyc differ diff --git a/record/urls.py b/record/urls.py new file mode 100644 index 0000000..82c2dc6 --- /dev/null +++ b/record/urls.py @@ -0,0 +1,16 @@ +from django.conf.urls import patterns, include, url + +from django.contrib import admin +admin.autodiscover() + +urlpatterns = patterns('', + # Examples: + # url(r'^$', 'record.views.home', name='home'), + # url(r'^blog/', include('blog.urls')), + url(r'^product/$', 'asuzr.views.prod_list'), + url(r'^product/(?P\d+)/$', 'asuzr.views.prod_detail'), + url(r'^attendance/(?P\d+)/(?P\d+)/$', 'asuzr.views.attend_table'), + url(r'^orders/(?P\d+)/(?P\d+)/(?P\d+)/$', 'asuzr.views.orders_table'), + url(r'^attend_order/(?P\d+)/(?P\d+)/$', 'asuzr.views.attend_order_table'), + url(r'^admin/', include(admin.site.urls)), +) diff --git a/record/urls.pyc b/record/urls.pyc new file mode 100644 index 0000000..747de66 Binary files /dev/null and b/record/urls.pyc differ diff --git a/record/wsgi.py b/record/wsgi.py new file mode 100644 index 0000000..326e430 --- /dev/null +++ b/record/wsgi.py @@ -0,0 +1,14 @@ +""" +WSGI config for record project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/ +""" + +import os +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "record.settings") + +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() diff --git a/record/wsgi.pyc b/record/wsgi.pyc new file mode 100644 index 0000000..71c5134 Binary files /dev/null and b/record/wsgi.pyc differ diff --git a/templates/admin/base_site.html b/templates/admin/base_site.html new file mode 100644 index 0000000..e5410fa --- /dev/null +++ b/templates/admin/base_site.html @@ -0,0 +1,10 @@ +{% extends "admin/base.html" %} +{% load i18n %} + +{% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %} + +{% block branding %} +

{% trans 'Автоматизированная система учета заказов студии мебели Рекорд' %}

+{% endblock %} + +{% block nav-global %}{% endblock %} diff --git a/templates/asuzr/attend_order.html b/templates/asuzr/attend_order.html new file mode 100644 index 0000000..f02c5bd --- /dev/null +++ b/templates/asuzr/attend_order.html @@ -0,0 +1,2 @@ +{% include 'asuzr/attendance.html' %} +{% include 'asuzr/orders.html' %} \ No newline at end of file diff --git a/templates/asuzr/attendance.html b/templates/asuzr/attendance.html new file mode 100644 index 0000000..43f1c60 --- /dev/null +++ b/templates/asuzr/attendance.html @@ -0,0 +1,43 @@ + + + Таблица посещаемости + + + + +

Таблица посещаемости

+ + {% if attend_list %} +
    +
+ + + + + + + + {% for attend in attend_list %} + + + + + + + + + {% endfor %} + + + + + + + + + {% else %} +

Список изделий пуст

+ {% endif %} +
ДатаДень неделиЗвонкиПосещенияЗаказыСтоимость
{{ attend.date_dd_mm_yy}}{{ attend.week_day}}{{ attend.calls }}{{ attend.visits }}{{ attend.order_count}}{{ attend.orders_price}}
ИТОГО:{{sum_calls}}{{sum_visits}}{{sum_orders}}{{sum_price}}
+ + \ No newline at end of file diff --git a/templates/asuzr/orders.html b/templates/asuzr/orders.html new file mode 100644 index 0000000..18f8baa --- /dev/null +++ b/templates/asuzr/orders.html @@ -0,0 +1,41 @@ + + + Заказы + + + + +

Заказы

+ + {% if order_list %} +
    +
+ + + + + + + {% for order in order_list %} + + + + + + + + {% endfor %} + + + + + + + + + {% else %} +

Список заказов пуст

+ {% endif %} +
НаименованиеСтоимостьАдресДизайнерСрок сдачи
{{ order.product.name }}{{ order.price }}{{ order.address }}{{ order.designer.first_name }}{{ order.deadline_dmy }}
ИТОГО:{{sum_price}}
+ + \ No newline at end of file diff --git a/templates/asuzr/prod_list.html b/templates/asuzr/prod_list.html new file mode 100644 index 0000000..e722461 --- /dev/null +++ b/templates/asuzr/prod_list.html @@ -0,0 +1,18 @@ + + + Типы изделий + + + + + {% if product_list %} +
    + {% for prod in product_list %} +
  • {{ prod.name }}
  • + {% endfor %} +
+{% else %} +

Список изделий пуст

+{% endif %} + + \ No newline at end of file