diff --git a/system/LiveStream/settings.py b/system/LiveStream/settings.py
index 5965c5deab4ef9db73e4951d68ae9aab38c80b14..76f43647dfe27e229912550830b42bd4051a6f5c 100644
--- a/system/LiveStream/settings.py
+++ b/system/LiveStream/settings.py
@@ -91,7 +91,7 @@ DATABASES = {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'livestream',
'USER': 'root',
- 'PASSWORD': '123456',
+ 'PASSWORD': 'lgy7932655',
'HOST': 'localhost',
'PORT': '3306',
diff --git a/system/login/urls.py b/system/login/urls.py
index ff923c93b014e2acd0913d721ab7229c57002a81..c8836d7c4e171f4610f4c7062a2cacb41a523fc5 100644
--- a/system/login/urls.py
+++ b/system/login/urls.py
@@ -1,4 +1,4 @@
-from django.urls import path, include
+from django.urls import path,include
from django.urls import re_path as url
from . import views
from . import view1
diff --git a/system/proc/admin.py b/system/proc/admin.py
index 8c38f3f3dad51e4585f3984282c2a4bec5349c1e..d3e3c280e0a9c54244e95e93a9aaa2209e8a8725 100644
--- a/system/proc/admin.py
+++ b/system/proc/admin.py
@@ -1,3 +1,8 @@
from django.contrib import admin
# Register your models here.
+
+from .models import *
+admin.site.register(ProcureOrder)
+admin.site.register(ProcurePlan)
+admin.site.register(ReplenishRequest)
diff --git a/system/proc/models.py b/system/proc/models.py
index 71a836239075aa6e6e4ecb700e9c42c95c022d91..def1d9b518cfca1d5ed76d0d3b19372945474d5b 100644
--- a/system/proc/models.py
+++ b/system/proc/models.py
@@ -1,3 +1,144 @@
from django.db import models
+
# Create your models here.
+
+
+class EmployeeInfo(models.Model):
+ eid = models.CharField(primary_key=True, max_length=10)
+ ename = models.CharField(max_length=10, blank=True, null=True)
+ psword = models.CharField(max_length=20, blank=True, null=True)
+ etype = models.CharField(max_length=20, blank=True, null=True)
+
+ class Meta:
+ managed = False
+ db_table = 'employee_info'
+
+
+class ProcureAdmin(models.Model):
+ eid = models.OneToOneField(EmployeeInfo, models.DO_NOTHING, db_column='eid', primary_key=True)
+ pro_name = models.CharField(max_length=10, blank=True, null=True)
+
+ class Meta:
+ managed = False
+ db_table = 'procure_admin'
+
+
+class ProcureOrder(models.Model): # 采购订单
+ procure = models.OneToOneField('ProcurePlan', models.DO_NOTHING,
+ primary_key=True)
+ sup = models.ForeignKey('SupplyInfo', models.DO_NOTHING)
+ procure_price = models.FloatField()
+ procure_num = models.IntegerField()
+ over = models.IntegerField()
+
+ class Meta:
+ managed = False
+ db_table = 'procure_order'
+ unique_together = (('sup', 'procure'),)
+
+
+class ProcurePlan(models.Model): # 采购计划
+ procure = models.OneToOneField('ReplenishRequest', models.DO_NOTHING, primary_key=True)
+ check_status = models.CharField(max_length=8)
+ project_intro = models.CharField(max_length=1024, blank=True, null=True)
+ procure_rule = models.CharField(max_length=1024, blank=True, null=True)
+ procure_content = models.CharField(max_length=1024, blank=True, null=True)
+ over = models.IntegerField()
+
+ class Meta:
+ managed = False
+ db_table = 'procure_plan'
+
+
+class ReplenishRequest(models.Model):
+ request_num = models.IntegerField()
+ request_time = models.DateTimeField()
+ procure_id = models.CharField(primary_key=True, max_length=10)
+ eid = models.ForeignKey(ProcureAdmin, models.DO_NOTHING, db_column='eid')
+ goods = models.ForeignKey('StockInfo', models.DO_NOTHING, blank=True, null=True)
+ over = models.IntegerField()
+
+ class Meta:
+ managed = False
+ db_table = 'replenish_request'
+
+
+class SupplyInfo(models.Model):
+ sup_id = models.CharField(primary_key=True, max_length=10)
+ sup_name = models.CharField(max_length=20)
+ sup_contact = models.CharField(max_length=15)
+ sup_serve = models.CharField(max_length=1024)
+ sup_level = models.CharField(max_length=10)
+
+ class Meta:
+ managed = False
+ db_table = 'supply_info'
+
+
+class StockInfo(models.Model):
+ goods = models.OneToOneField('GoodsInfo', models.DO_NOTHING, primary_key=True)
+ goods_details = models.CharField(max_length=1024, blank=True, null=True)
+ stock_num = models.IntegerField()
+
+ class Meta:
+ managed = False
+ db_table = 'stock_info'
+
+
+class GoodsInfo(models.Model):
+ goods_id = models.CharField(primary_key=True, max_length=10)
+ goods_name = models.CharField(max_length=20, blank=True, null=True)
+ goods_type = models.CharField(max_length=20, blank=True, null=True)
+ gprice = models.FloatField(blank=True, null=True)
+
+ class Meta:
+ managed = False
+ db_table = 'goods_info'
+
+
+class LogisticsInfo(models.Model):
+ logi_id = models.CharField(max_length=10, primary_key=True)
+ sup = models.OneToOneField('SupplyInfo', models.DO_NOTHING, related_name='order_logi_sup')
+ procure = models.ForeignKey('ProcureOrder', models.DO_NOTHING, to_field='procure', related_name="order_logi_procure")
+ start_time = models.DateTimeField()
+ logi_status = models.CharField(max_length=10)
+ arrival_time = models.DateTimeField(blank=True, null=True)
+ over = models.IntegerField()
+
+ class Meta:
+ managed = False
+ db_table = 'logistics_info'
+ unique_together = (('sup', 'logi_id', 'procure'),)
+
+
+class QualityInfo(models.Model):
+ sup = models.OneToOneField(SupplyInfo, models.DO_NOTHING, to_field='sup_id',
+ related_name='qualityinfo_sup_set')
+ logi = models.ForeignKey(LogisticsInfo, models.DO_NOTHING, to_field='logi_id', related_name='qualityinfo_logi_set')
+ procure = models.ForeignKey(ReplenishRequest, models.DO_NOTHING, primary_key=True, )
+ quality_status = models.CharField(max_length=10)
+ quality_result = models.CharField(max_length=10)
+ details_info = models.CharField(max_length=1024, blank=True, null=True)
+ over = models.IntegerField()
+
+ class Meta:
+ managed = False
+ db_table = 'quality_info'
+ unique_together = (('sup', 'logi', 'procure'),)
+
+
+class StockIn(models.Model):
+ procure = models.CharField(primary_key=True, max_length=10) # The composite primary key (procure, goods_id) found, that is not supported. The first column is selected.
+ goods_id = models.CharField(max_length=45)
+ goods_name = models.CharField(max_length=45)
+ in_num = models.IntegerField()
+ in_time = models.DateTimeField()
+
+ class Meta:
+ managed = False
+ db_table = 'stock_in'
+ unique_together = (('procure', 'goods_id'),)
+
+
+
diff --git a/system/proc/urls.py b/system/proc/urls.py
index ddd8a8087dc49f16ed78a01e47703ab19ca0efce..03dfd3458311f17574bc9ee50f1d9abfb49aee4d 100644
--- a/system/proc/urls.py
+++ b/system/proc/urls.py
@@ -1,5 +1,5 @@
from django.urls import path
-from proc import views
+from . import views
app_name='proc'#需要添加app名称,不然include无法找到该model,在html文件里需要加上app名
@@ -8,4 +8,15 @@ urlpatterns = [
path('order', views.proc_order, name='proc_order'),
path('check', views.proc_check, name='proc_check'),
path('plan', views.proc_plan, name='proc_plan'),
+ path('', views.index_views, name='index_views'),
+ path('plan1', views.create_plan, name='create_plan'),
+ path('plan/plan1', views.insert_plan, name='insert_plan'),
+ path('order/index', views.insert_order, name='insert_order'),
+ path('order/logi', views.ShowLogi, name='logi'),
+ path('check1', views.check, name='check'),
+ path('order1', views.get_plan, name='get_plan'),
+ path('order1/index', views.check_plan, name='check_plan'),
+ path('logi/index', views.good_sub, name='good_sub'),
+ path('history', views.history_page, name='history'),
+ # path('', views.ShowProcurePlan, name='show_plan')
]
diff --git a/system/proc/views.py b/system/proc/views.py
index ae7e0ca51f515f5093fd0ee2cd4aa7982b34e620..17d284ae2e424aa0de91ebb4a8faa290bc38efcd 100644
--- a/system/proc/views.py
+++ b/system/proc/views.py
@@ -1,15 +1,332 @@
from django.shortcuts import render
+import datetime
+from django.contrib import messages
+from django.db.models import Q
# Create your views here.
-
+from .models import *
from django.http import HttpResponse
+
def proc_order(request):
return render(request, '../templates/Procurement/order-page.html')
+
def proc_check(request):
return render(request, '../templates/Procurement/proc-check.html')
+
def proc_plan(request):
return render(request, '../templates/Procurement/proc-plan.html')
+
+def index_views(request):
+ replenish = ShowReplenishRequest()
+ plan = ShowProcurePlan()
+ order = ShowOrder()
+ quality = ShowQuality()
+ return render(request, '../templates/Procurement/index.html',
+ {"replenish": replenish, "plan": plan, "order": order, "quality": quality})
+
+
+def ShowReplenishRequest():
+ replenish = ReplenishRequest.objects.filter().exclude(over=1).all()
+ return replenish
+
+
+def ShowProcurePlan():
+ plan = ProcurePlan.objects.filter(~Q(over=1))
+ print(plan)
+ for item in plan:
+ # goods_id = ReplenishRequest.objects.filter(procure_id=item.procure.procure_id).first().goods.goods_id
+ goods_id = item.procure.goods.goods_id
+ good = GoodsInfo.objects.filter(goods_id=goods_id).first()
+ item.procure_content = good.goods_name
+ item.money = good.gprice * item.procure.request_num / 2
+ return plan
+
+
+def ShowOrder():
+ order = ProcureOrder.objects.filter().exclude(over=1).all()
+ for item in order:
+ logi = item.order_logi_procure.all().first()
+ if logi.arrival_time.replace(tzinfo=None) > datetime.datetime.now():
+ logi.logi_status = '未送达'
+ else:
+ logi.logi_status = '已送达'
+ logi.save()
+ return order
+
+
+def ShowQuality():
+ quality = QualityInfo.objects.filter().exclude(over=1).all()
+ for item in quality:
+ logi = item.logi
+ if item.quality_status == '核验完成':
+ item.pro = str(100)
+ continue
+ else:
+ if logi.logi_status == '未送达':
+ item.quality_status = '未送达'
+ else:
+ item.quality_status = '已送达,未核验'
+ item.save()
+ status = item.quality_status
+ pro = 0
+ if status == '未送达':
+ pro = 25
+ elif status == '已送达,未核验':
+ pro = 75
+ item.pro = str(pro)
+ return quality
+
+
+def create_plan(request): # 进入创建采购计划页面
+ if request.method == 'POST':
+ res = {}
+ procure_id = request.POST['采购需求']
+ # print(procure_id)
+ # print(1)
+ replenish = ReplenishRequest.objects.filter(procure_id=procure_id).first()
+ content = replenish.goods.goods.goods_name
+ return render(request, '../templates/Procurement/proc-plan.html',
+ {"procure_id": procure_id, "content": content})
+ else:
+ return render(request, '../templates/Procurement/index.html')
+
+
+def insert_plan(request): # 生成采购计划,并插入数据库
+ if request.method == "POST":
+ id = request.POST['id']
+ principle = request.POST['principle']
+ replenish = ReplenishRequest.objects.filter(procure_id=id).first()
+ content = replenish.goods.goods.goods_name
+ project_intro = "采购" + content
+ ProcurePlan.objects.create(procure=replenish, check_status='未审批', project_intro=project_intro,
+ procure_rule=principle, procure_content=content, over=0)
+ return render(request, '../templates/Procurement/proc-plan.html')
+
+
+def insert_order(request): # 生成采购计划,并插入数据库
+ if request.method == 'POST':
+ replenish1 = request.POST['采购计划']
+ # print(1)
+ # print(request)
+ plan = ProcurePlan.objects.filter(procure=replenish1).first()
+ if plan.check_status != '审批通过':
+ messages.error(request, '审批未通过或未审批!请在审批后进行匹配操作。')
+ replenish = ShowReplenishRequest()
+ plan = ShowProcurePlan()
+ order = ShowOrder()
+ quality = ShowQuality()
+ return render(request, '../templates/Procurement/index.html',
+ {"replenish": replenish, "plan": plan, "order": order, "quality": quality})
+ replenish1 = plan.procure
+ # print(plan)
+ sup = SupplyInfo.objects.filter(sup_serve=plan.procure_content).order_by('sup_level').first()
+ num = replenish1.request_num
+ price = replenish1.goods.goods.gprice / 2.5
+ ProcureOrder.objects.create(procure=plan, sup=sup, procure_price=price, procure_num=num, over=0)
+ order1 = ProcureOrder.objects.filter(procure=plan).first()
+ insert_logi(order1, replenish1)
+ insert_quality(order1)
+
+ replenish = ShowReplenishRequest()
+ plan = ShowProcurePlan()
+ order = ShowOrder()
+ quality = ShowQuality()
+ return render(request, '../templates/Procurement/index.html',
+ {"replenish": replenish, "plan": plan, "order": order, "quality": quality})
+ else:
+ return render(request, '../templates/Procurement/index.html')
+
+
+def insert_quality(order):
+ logi = order.order_logi_procure.all().first()
+ sup = logi.sup
+ procure = order.procure.procure
+ quality_result = '未核验'
+ if logi.logi_status == '未送达':
+ quality_status = '未送达'
+ else:
+ quality_status = '已送达,未核验'
+ quality_result = '未核验'
+ QualityInfo.objects.create(procure=procure, logi=logi, sup=sup, quality_status=quality_status,
+ quality_result=quality_result, over=0)
+
+
+def insert_logi(order1, replenish1):
+ start_time = replenish1.request_time + datetime.timedelta(days=1)
+ arrival_time = start_time + datetime.timedelta(days=3)
+ if arrival_time.replace(tzinfo=None) > datetime.datetime.now():
+ logi_status = '未送达'
+ else:
+ logi_status = '已送达'
+ LogisticsInfo.objects.create(logi_id='logi_' + replenish1.procure_id, sup=order1.sup, procure=order1,
+ start_time=start_time, logi_status=logi_status, arrival_time=arrival_time, over=0)
+
+
+def ShowLogi(request):
+ if request.method == 'POST':
+ logi_id = request.POST['物流单']
+ # print(logi_id)
+ logi = LogisticsInfo.objects.filter(logi_id=logi_id).first()
+ # print(logi)
+ return render(request, '../templates/Procurement/logi.html', {'logi': logi})
+
+
+def check(request):
+ if request.method == 'POST':
+ proc_id = request.POST['订单号']
+ e_id = request.POST['工号']
+ result = request.POST['结果']
+ procure = ReplenishRequest.objects.get(procure_id=proc_id)
+ quality1 = QualityInfo.objects.get(procure=procure)
+ logi = quality1.logi
+ if logi.logi_status == '未送达':
+ messages.error(request, "商品暂未送达,请在送达后核验。")
+ return render(request, '../templates/Procurement/proc-check.html', )
+ quality1.quality_status = '核验完成'
+ quality1.quality_result = result
+ quality1.save()
+
+ replenish = ShowReplenishRequest()
+ plan = ShowProcurePlan()
+ order = ShowOrder()
+ quality = ShowQuality()
+ return render(request, '../templates/Procurement/index.html',
+ {"replenish": replenish, "plan": plan, "order": order, "quality": quality})
+
+
+def get_plan(request):
+ if request.method == 'POST':
+ proc_id = request.POST['p_id']
+ replenish1 = ReplenishRequest.objects.filter(procure_id=proc_id).first()
+ plan = ProcurePlan.objects.filter(procure=replenish1).first()
+ return render(request, '../templates/Procurement/order-page.html', {'plan': plan})
+
+
+def check_plan(request):
+ if request.method == 'POST':
+ permission = request.POST['permit']
+ # print(permission)
+ proc_id = request.POST['p_id']
+ replenish1 = ReplenishRequest.objects.filter(procure_id=proc_id).first()
+ plan = ProcurePlan.objects.filter(procure=replenish1).first()
+ if permission == '是':
+ plan.check_status = '审批通过'
+ elif permission == '否':
+ plan.check_status = '审批未通过'
+ plan.save()
+ messages.success(request, "审批完成")
+
+ replenish = ShowReplenishRequest()
+ plan = ShowProcurePlan()
+ order = ShowOrder()
+ quality = ShowQuality()
+ return render(request, '../templates/Procurement/index.html',
+ {"replenish": replenish, "plan": plan, "order": order, "quality": quality})
+
+
+def good_sub(request):
+ if request.method == 'POST':
+ id = request.POST['交付单']
+ replenish1 = ReplenishRequest.objects.filter(procure_id=id).first()
+ plan = ProcurePlan.objects.filter(procure=replenish1).first()
+ order = ProcureOrder.objects.filter(procure=plan).first()
+ logi = LogisticsInfo.objects.filter(procure=order).first()
+ quality = QualityInfo.objects.filter(procure=replenish1).first()
+ good_id = replenish1.goods.goods.goods_id
+ # print(good_id)
+ good_name = replenish1.goods.goods.goods_name
+ in_num = replenish1.request_num
+ in_time = datetime.datetime.now()
+
+ if quality.quality_result == "合格":
+ StockIn.objects.create(procure=id, goods_id=good_id, goods_name=good_name,
+ in_num=in_num, in_time=in_time)
+ replenish1.over = 1
+ replenish1.save()
+ plan.over = 1
+ plan.save()
+ order.over = 1
+ order.save()
+ logi.over = 1
+ logi.save()
+ quality.over = 1
+ quality.save()
+
+ else:
+ messages.error(request, '质检未通过,无法交付!')
+
+ replenish = ShowReplenishRequest()
+ plan = ShowProcurePlan()
+ order = ShowOrder()
+ quality = ShowQuality()
+ return render(request, '../templates/Procurement/index.html',
+ {"replenish": replenish, "plan": plan, "order": order, "quality": quality})
+
+
+def history_page(request):
+ replenish = ShowReplenishRequest_history()
+ plan = ShowProcurePlan_history()
+ order = ShowOrder_history()
+ quality = ShowQuality_history()
+ return render(request, '../templates/Procurement/history.html',
+ {"replenish": replenish, "plan": plan, "order": order, "quality": quality})
+
+
+def ShowReplenishRequest_history():
+ replenish = ReplenishRequest.objects.filter(over=1)
+ return replenish
+
+
+def ShowProcurePlan_history():
+ plan = ProcurePlan.objects.filter(over=1)
+ print(plan)
+ for item in plan:
+ # goods_id = ReplenishRequest.objects.filter(procure_id=item.procure.procure_id).first().goods.goods_id
+ goods_id = item.procure.goods.goods_id
+ good = GoodsInfo.objects.filter(goods_id=goods_id).first()
+ item.procure_content = good.goods_name
+ item.money = good.gprice * item.procure.request_num / 2
+ return plan
+
+
+def ShowOrder_history():
+ order = ProcureOrder.objects.filter(over=1)
+ return order
+
+
+def ShowQuality_history():
+ quality = QualityInfo.objects.filter(over=1)
+ for item in quality:
+ item.pro = str(100)
+ return quality
+
+
+'''
+def ShowReplenishRequest(request):
+ replenish = ReplenishRequest.objects.all()
+ plan = ProcurePlan.objects.all()
+ order = ProcureOrder.objects.all()
+ quality = QualityInfo.objects.all()
+ # goods = GoodsInfo.objects.all()
+ for item in plan:
+ # goods_id = ReplenishRequest.objects.filter(procure_id=item.procure.procure_id).first().goods.goods_id
+ goods_id = item.procure.goods.goods_id
+ item.procure_content = GoodsInfo.objects.filter(goods_id=goods_id).first().goods_name
+ # order = ProcureOrder.objects.select_related("procure")
+ for item in quality:
+ status = item.quality_status
+ pro = 0
+ if status == '未送达':
+ pro = 0
+ elif status == '已送达,未核验':
+ pro = 50
+ elif status == '核验完成':
+ pro = 100
+ item.pro = str(pro)
+ return render(request, '../templates/Procurement/index.html',
+ {"replenish": replenish, "plan": plan, "order": order, "quality": quality})
+'''
diff --git a/system/static/css/style.css b/system/static/css/style.css
index 47f203b06bb507235e68a2d89f3d0e7bbdb1e383..fcc1a580f95dc2139e2fac0d363fd6c2a7384700 100644
--- a/system/static/css/style.css
+++ b/system/static/css/style.css
@@ -23187,4 +23187,69 @@ dl li {
outline: 1px solid slategrey;
}
+.shortselect{
+ background:#fafdfe;
+ height:28px;
+ width:180px;
+ line-height:28px;
+ border:1px solid #9bc0dd;
+ -moz-border-radius:2px;
+ -webkit-border-radius:2px;
+ border-radius:2px;
+}
+
+
+ body {
+ font-size: 20px;
+ color: #090;
+ background-color: #eee;
+ text-align: center;
+ }
+ .select {
+ display: inline-block;
+ width: 300px;
+ position: relative;
+ vertical-align: middle;
+ padding: 0;
+ overflow: hidden;
+ background-color: #fff;
+ color: #555;
+ border: 1px solid #aaa;
+ text-shadow: none;
+ border-radius: 4px;
+ transition: box-shadow 0.25s ease;
+ z-index: 2;
+ }
+
+ .select:hover {
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
+ }
+
+ .select:before {
+ content: "";
+ position: absolute;
+ width: 0;
+ height: 0;
+ border: 10px solid transparent;
+ border-top-color: #ccc;
+ top: 14px;
+ right: 10px;
+ cursor: pointer;
+ z-index: -2;
+ }
+ .select select {
+ cursor: pointer;
+ padding: 10px;
+ width: 100%;
+ border: none;
+ background: transparent;
+ background-image: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ }
+
+ .select select:focus {
+ outline: none;
+ }
+
/*# sourceMappingURL=maps/style.css.map */
diff --git a/system/templates/Procurement/history.html b/system/templates/Procurement/history.html
new file mode 100644
index 0000000000000000000000000000000000000000..823834a55fffd337216fc570acaf18479d2f2cf6
--- /dev/null
+++ b/system/templates/Procurement/history.html
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+ 采购历史数据
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if messages %}
+
+ {% endif %}
+
+
\ No newline at end of file
diff --git a/system/templates/Procurement/index.html b/system/templates/Procurement/index.html
index 77fb878d566f8415a148a1768126b4c188b91e3d..5b12f9e32612a4523225ea25ca779146a7b5462c 100644
--- a/system/templates/Procurement/index.html
+++ b/system/templates/Procurement/index.html
@@ -81,21 +81,27 @@