Ver Fonte

initial commit

Anastasia há 10 anos atrás
pai
commit
f0a9db1c86

+ 3 - 0
.directory

@@ -0,0 +1,3 @@
+[Dolphin]
+Timestamp=2015,4,13,16,48,17
+Version=3

+ 0 - 0
asuzr/__init__.py


BIN
asuzr/__init__.pyc


+ 24 - 0
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)

BIN
asuzr/admin.pyc


+ 101 - 0
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()

BIN
asuzr/models.pyc


+ 3 - 0
asuzr/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 96 - 0
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))
+  
+  
+
+

BIN
asuzr/views.pyc


+ 0 - 0
record/__init__.py


BIN
record/__init__.pyc


+ 85 - 0
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/')

BIN
record/settings.pyc


+ 16 - 0
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<prod_id>\d+)/$', 'asuzr.views.prod_detail'),
+    url(r'^attendance/(?P<year>\d+)/(?P<month>\d+)/$', 'asuzr.views.attend_table'),
+    url(r'^orders/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/$', 'asuzr.views.orders_table'),
+    url(r'^attend_order/(?P<year>\d+)/(?P<month>\d+)/$', 'asuzr.views.attend_order_table'),
+    url(r'^admin/', include(admin.site.urls)),
+)

BIN
record/urls.pyc


+ 14 - 0
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()

BIN
record/wsgi.pyc


+ 10 - 0
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 %}
+<h1 id="site-name">{% trans 'Автоматизированная система учета заказов студии мебели Рекорд' %}</h1>
+{% endblock %}
+
+{% block nav-global %}{% endblock %}

+ 2 - 0
templates/asuzr/attend_order.html

@@ -0,0 +1,2 @@
+{% include 'asuzr/attendance.html' %}
+{% include 'asuzr/orders.html' %}

+ 43 - 0
templates/asuzr/attendance.html

@@ -0,0 +1,43 @@
+<html>
+  <head>
+    <title>Таблица посещаемости</title>
+    <meta content="">
+    <style></style>
+  </head>
+  <body>
+  <H1>Таблица посещаемости</H1>
+  <TABLE BORDER WIDTH="100%">
+  {% if attend_list %}
+    <ul>
+    <TR>
+      <TH>Дата</TH>
+      <TH>День недели</TH>
+      <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>{{ attend.order_count}}</TD>
+	  <TD>{{ attend.orders_price}}</TD>
+        </TR>
+    {% endfor %}
+    <TR>
+      <TD COLSPAN=2>ИТОГО:</TD>
+      <TD>{{sum_calls}}</TD>
+      <TD>{{sum_visits}}</TD>
+      <TD>{{sum_orders}}</TD>
+      <TD>{{sum_price}}</TD>
+     </TR>
+    </ul>
+  {% else %}
+    <p>Список изделий пуст</p>
+  {% endif %}
+  </TABLE>
+  </body>
+</html>

+ 41 - 0
templates/asuzr/orders.html

@@ -0,0 +1,41 @@
+<html>
+  <head>
+    <title>Заказы</title>
+    <meta content="">
+    <style></style>
+  </head>
+  <body>
+  <H1>Заказы</H1>
+  <TABLE BORDER WIDTH="100%">
+  {% if order_list %}
+    <ul>
+    <TR>
+      <TH>Наименование</TH>
+      <TH>Стоимость</TH>
+      <TH>Адрес</TH>
+      <TH>Дизайнер</TH>
+      <TH>Срок сдачи</TH>
+    </TR>
+    {% for order in order_list %}
+        <TR>
+	  <TD>{{ order.product.name }}</TD>
+	  <TD>{{ order.price }}</TD>
+	  <TD>{{ order.address }}</TD>
+	  <TD>{{ order.designer.first_name }}</TD>
+	  <TD>{{ order.deadline_dmy }}</TD>
+        </TR>
+    {% endfor %}
+    <TR>
+      <TD> ИТОГО:</TD>
+      <TD>{{sum_price}}</TD>
+      <TD></TD>
+      <TD></TD>
+      <TD></TD>
+     </TR>
+    </ul>
+  {% else %}
+    <p> Список заказов пуст</p>
+  {% endif %}
+  </TABLE>
+  </body>
+</html>

+ 18 - 0
templates/asuzr/prod_list.html

@@ -0,0 +1,18 @@
+<html>
+  <head>
+    <title>Типы изделий</title>
+    <meta content="">
+    <style></style>
+  </head>
+  <body>
+  {% if product_list %}
+    <ul>
+    {% for prod in product_list %}
+        <li>{{ prod.name }}</li>
+    {% endfor %}
+    </ul>
+{% else %}
+    <p>Список изделий пуст</p>
+{% endif %}
+  </body>
+</html>