Update 2026-06-10 11:45:26
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
-- 销售订单示例数据(依赖 basedata_partner / basedata_material 等基础数据)
|
||||
-- 导入: mysql -uroot -proot mis < Install/SQL/sale_order_sample.sql
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
INSERT INTO `sale_saleorder`
|
||||
(`id`,`begin`,`end`,`creator`,`modifier`,`creation`,`modification`,`code`,`order_date`,`deliver_date`,`title`,`description`,`contact`,`phone`,`fax`,`deliver_address`,`invoice_type`,`amount`,`discount_amount`,`status`,`org_id`,`partner_id`,`user_id`)
|
||||
SELECT 1,'2025-05-20','9999-12-31','chengcai','chengcai',NOW(),NOW(),'SO00001','2025-05-10','2025-05-25','办公设备采购订单','含笔记本电脑及服务器,需上门安装调试。','张经理','13800138001',NULL,'上海市浦东新区张江高科技园区科苑路88号','10',24299.00,0.00,'9',1,17,11
|
||||
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sale_saleorder WHERE code='SO00001');
|
||||
|
||||
INSERT INTO `sale_saleorder`
|
||||
(`id`,`begin`,`end`,`creator`,`modifier`,`creation`,`modification`,`code`,`order_date`,`deliver_date`,`title`,`description`,`contact`,`phone`,`fax`,`deliver_address`,`invoice_type`,`amount`,`discount_amount`,`status`,`org_id`,`partner_id`,`user_id`)
|
||||
SELECT 2,'2025-05-20','9999-12-31','chengcai','chengcai',NOW(),NOW(),'SO00002','2025-05-15','2025-06-01','配电设备批量采购','项目现场配电改造用材。','李工','13900139002',NULL,'江苏省南京市江宁区将军大道29号','10',6400.00,200.00,'1',1,17,11
|
||||
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sale_saleorder WHERE code='SO00002');
|
||||
|
||||
INSERT INTO `sale_saleorder`
|
||||
(`id`,`begin`,`end`,`creator`,`modifier`,`creation`,`modification`,`code`,`order_date`,`deliver_date`,`title`,`description`,`contact`,`phone`,`fax`,`deliver_address`,`invoice_type`,`amount`,`discount_amount`,`status`,`org_id`,`partner_id`,`user_id`)
|
||||
SELECT 3,'2025-05-20','9999-12-31','chengcai','chengcai',NOW(),NOW(),'SO00003','2025-05-18','2025-05-22','水果批发季节订单','当季鲜果直采,分批配送。','王采购','13700137003',NULL,'浙江省杭州市余杭区良渚街道物流园A区','10',13962.00,0.00,'0',1,17,11
|
||||
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sale_saleorder WHERE code='SO00003');
|
||||
|
||||
INSERT INTO `sale_saleorder`
|
||||
(`id`,`begin`,`end`,`creator`,`modifier`,`creation`,`modification`,`code`,`order_date`,`deliver_date`,`title`,`description`,`contact`,`phone`,`fax`,`deliver_address`,`invoice_type`,`amount`,`discount_amount`,`status`,`org_id`,`partner_id`,`user_id`)
|
||||
SELECT 4,'2025-05-20','9999-12-31','chengcai','chengcai',NOW(),NOW(),'SO00004','2025-05-20','2025-05-28','劳保用品集中采购','车间一线员工劳保手套补充采购。','赵主任','13600136004',NULL,'安徽省合肥市蜀山区望江西路666号','10',5500.00,0.00,'9',1,17,11
|
||||
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sale_saleorder WHERE code='SO00004');
|
||||
|
||||
INSERT INTO `sale_saleitem` (`id`,`cnt`,`stock_price`,`sale_price`,`tax`,`create_time`,`status`,`event_time`,`master_id`,`material_id`,`measure_id`,`discount_price`)
|
||||
SELECT 1,2.0000,NULL,7150.0000,'0.00',NOW(),0,NULL,1,53,1,NULL FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sale_saleitem WHERE id=1);
|
||||
|
||||
INSERT INTO `sale_saleitem` (`id`,`cnt`,`stock_price`,`sale_price`,`tax`,`create_time`,`status`,`event_time`,`master_id`,`material_id`,`measure_id`,`discount_price`)
|
||||
SELECT 2,1.0000,NULL,9999.0000,'0.00',NOW(),0,NULL,1,54,1,NULL FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sale_saleitem WHERE id=2);
|
||||
|
||||
INSERT INTO `sale_saleitem` (`id`,`cnt`,`stock_price`,`sale_price`,`tax`,`create_time`,`status`,`event_time`,`master_id`,`material_id`,`measure_id`,`discount_price`)
|
||||
SELECT 3,20.0000,NULL,320.0000,'0.00',NOW(),0,NULL,2,52,1,NULL FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sale_saleitem WHERE id=3);
|
||||
|
||||
INSERT INTO `sale_saleitem` (`id`,`cnt`,`stock_price`,`sale_price`,`tax`,`create_time`,`status`,`event_time`,`master_id`,`material_id`,`measure_id`,`discount_price`)
|
||||
SELECT 4,500.0000,NULL,10.9200,'0.00',NOW(),0,NULL,3,40,3,NULL FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sale_saleitem WHERE id=4);
|
||||
|
||||
INSERT INTO `sale_saleitem` (`id`,`cnt`,`stock_price`,`sale_price`,`tax`,`create_time`,`status`,`event_time`,`master_id`,`material_id`,`measure_id`,`discount_price`)
|
||||
SELECT 5,300.0000,NULL,15.9900,'0.00',NOW(),0,NULL,3,41,3,NULL FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sale_saleitem WHERE id=5);
|
||||
|
||||
INSERT INTO `sale_saleitem` (`id`,`cnt`,`stock_price`,`sale_price`,`tax`,`create_time`,`status`,`event_time`,`master_id`,`material_id`,`measure_id`,`discount_price`)
|
||||
SELECT 6,200.0000,NULL,18.5250,'0.00',NOW(),0,NULL,3,42,3,NULL FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sale_saleitem WHERE id=6);
|
||||
|
||||
INSERT INTO `sale_saleitem` (`id`,`cnt`,`stock_price`,`sale_price`,`tax`,`create_time`,`status`,`event_time`,`master_id`,`material_id`,`measure_id`,`discount_price`)
|
||||
SELECT 7,1000.0000,NULL,5.5000,'0.00',NOW(),0,NULL,4,5,1,NULL FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sale_saleitem WHERE id=7);
|
||||
@@ -0,0 +1,170 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""导入销售订单示例数据。用法: python Install/load_sale_sample.py"""
|
||||
import os
|
||||
import sys
|
||||
import datetime
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
if BASE_DIR not in sys.path:
|
||||
sys.path.insert(0, BASE_DIR)
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mis.settings')
|
||||
|
||||
import django
|
||||
django.setup()
|
||||
|
||||
from decimal import Decimal
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import transaction
|
||||
from basedata.models import Partner, Material, Organization
|
||||
from sale.models import SaleOrder, SaleItem
|
||||
|
||||
|
||||
def recalc_order_amount(order):
|
||||
total = Decimal('0')
|
||||
for item in SaleItem.objects.filter(master=order):
|
||||
price = item.sale_price or Decimal('0')
|
||||
total += price * item.cnt
|
||||
SaleOrder.objects.filter(pk=order.pk).update(amount=total)
|
||||
order.amount = total
|
||||
return total
|
||||
|
||||
|
||||
SAMPLE_ORDERS = [
|
||||
{
|
||||
'code': 'SO00001',
|
||||
'title': u'办公设备采购订单',
|
||||
'order_date': datetime.date(2025, 5, 10),
|
||||
'deliver_date': datetime.date(2025, 5, 25),
|
||||
'contact': u'张经理',
|
||||
'phone': '13800138001',
|
||||
'deliver_address': u'上海市浦东新区张江高科技园区科苑路88号',
|
||||
'description': u'含笔记本电脑及服务器,需上门安装调试。',
|
||||
'status': '9',
|
||||
'discount_amount': 0,
|
||||
'items': [
|
||||
{'material_code': 'IT5001', 'cnt': 2, 'sale_price': 7150.00},
|
||||
{'material_code': 'IT5002', 'cnt': 1, 'sale_price': 9999.00},
|
||||
],
|
||||
},
|
||||
{
|
||||
'code': 'SO00002',
|
||||
'title': u'配电设备批量采购',
|
||||
'order_date': datetime.date(2025, 5, 15),
|
||||
'deliver_date': datetime.date(2025, 6, 1),
|
||||
'contact': u'李工',
|
||||
'phone': '13900139002',
|
||||
'deliver_address': u'江苏省南京市江宁区将军大道29号',
|
||||
'description': u'项目现场配电改造用材。',
|
||||
'status': '1',
|
||||
'discount_amount': 200.00,
|
||||
'items': [
|
||||
{'material_code': 'IT9981', 'cnt': 20, 'sale_price': 320.00},
|
||||
],
|
||||
},
|
||||
{
|
||||
'code': 'SO00003',
|
||||
'title': u'水果批发季节订单',
|
||||
'order_date': datetime.date(2025, 5, 18),
|
||||
'deliver_date': datetime.date(2025, 5, 22),
|
||||
'contact': u'王采购',
|
||||
'phone': '13700137003',
|
||||
'deliver_address': u'浙江省杭州市余杭区良渚街道物流园A区',
|
||||
'description': u'当季鲜果直采,分批配送。',
|
||||
'status': '0',
|
||||
'discount_amount': 0,
|
||||
'items': [
|
||||
{'material_code': 'IT9001', 'cnt': 500, 'sale_price': 11.00},
|
||||
{'material_code': 'IT9002', 'cnt': 300, 'sale_price': 16.00},
|
||||
{'material_code': 'IT9003', 'cnt': 200, 'sale_price': 19.00},
|
||||
],
|
||||
},
|
||||
{
|
||||
'code': 'SO00004',
|
||||
'title': u'劳保用品集中采购',
|
||||
'order_date': datetime.date(2025, 5, 20),
|
||||
'deliver_date': datetime.date(2025, 5, 28),
|
||||
'contact': u'赵主任',
|
||||
'phone': '13600136004',
|
||||
'deliver_address': u'安徽省合肥市蜀山区望江西路666号',
|
||||
'description': u'车间一线员工劳保手套补充采购。',
|
||||
'status': '9',
|
||||
'discount_amount': 0,
|
||||
'items': [
|
||||
{'material_code': 'IT00005', 'cnt': 1000, 'sale_price': 5.50},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def load_samples():
|
||||
partner = Partner.objects.filter(partner_type='C').first()
|
||||
if not partner:
|
||||
print(u'错误: 未找到客户类型合作伙伴,请先维护基础数据。')
|
||||
return
|
||||
|
||||
user = User.objects.filter(username='chengcai').first() or User.objects.first()
|
||||
org = Organization.objects.first()
|
||||
creator = user.username if user else 'system'
|
||||
today = datetime.date.today()
|
||||
|
||||
created = 0
|
||||
skipped = 0
|
||||
|
||||
with transaction.atomic():
|
||||
for data in SAMPLE_ORDERS:
|
||||
if SaleOrder.objects.filter(code=data['code']).exists():
|
||||
print(u'跳过已存在订单: %s' % data['code'])
|
||||
skipped += 1
|
||||
continue
|
||||
|
||||
order = SaleOrder(
|
||||
code=data['code'],
|
||||
title=data['title'],
|
||||
order_date=data['order_date'],
|
||||
deliver_date=data['deliver_date'],
|
||||
partner=partner,
|
||||
org=org,
|
||||
user=user,
|
||||
contact=data['contact'],
|
||||
phone=data['phone'],
|
||||
deliver_address=data['deliver_address'],
|
||||
description=data['description'],
|
||||
invoice_type='10',
|
||||
status=data['status'],
|
||||
discount_amount=data['discount_amount'],
|
||||
amount=0,
|
||||
begin=today,
|
||||
end=datetime.date(9999, 12, 31),
|
||||
creator=creator,
|
||||
modifier=creator,
|
||||
)
|
||||
order.save()
|
||||
|
||||
for item_data in data['items']:
|
||||
material = Material.objects.filter(code=item_data['material_code']).first()
|
||||
if not material:
|
||||
print(u'警告: 物料 %s 不存在,已跳过' % item_data['material_code'])
|
||||
continue
|
||||
item = SaleItem(
|
||||
master=order,
|
||||
material=material,
|
||||
cnt=item_data['cnt'],
|
||||
sale_price=item_data['sale_price'],
|
||||
tax='0.00',
|
||||
)
|
||||
item.save()
|
||||
|
||||
if data['discount_amount'] > 0:
|
||||
order.save()
|
||||
total = recalc_order_amount(order)
|
||||
print(u'已创建: %s %s 金额=%s 状态=%s' % (
|
||||
order.code, order.title, total, order.get_status_display()
|
||||
))
|
||||
created += 1
|
||||
|
||||
print(u'\n完成: 新增 %d 条,跳过 %d 条。' % (created, skipped))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
load_samples()
|
||||
Reference in New Issue
Block a user