提交 e309cb96 authored 作者: 李思鑫's avatar 李思鑫

add 包材管理

上级 d16ab6df
......@@ -108,9 +108,6 @@ urlpatterns = [
url(r'^obj/edit/(?P<obj_name>\w+)/$', list_views.edit_obj),
url(r'^obj/edit/(?P<obj_name>\w+)/(?P<id>\d+)/$', list_views.edit_obj),
#lisin 2024-08-19 包装物料供应商 管理
url(r'^packaging/supplier/manage/(?P<id>\d+)/$', list_views.packaging_supplier_manage),
#2020-05-20
url(r'^obj/agent/label/$', list_views.agent_lbl_info),
url(r'^obj/agent/label/(?P<user_id>\d+)/$', list_views.agent_lbl_info),
......@@ -1223,7 +1220,18 @@ urlpatterns = [
url(r'^migrate/check_companies/$', migrate.check_companies),
url(r'^migrate/check_products/$', migrate.check_products),
#lisin 2024-08-23 包材管理相关
url(r'^packaging/supplier/manage/(?P<id>\d+)/$', list_views.packaging_supplier_manage),
url(r'^mes/query/packaging/purchase/$', mes_views.packaging_purchase_query),
url(r'^mes/packaging/purchase/list/$', mes_views.packaging_purchase_list),
url(r'^mes/packaging/purchase/edit/(?P<id>\d+)/$', mes_views.packaging_purchase_edit),
url(r'^mes/packaging/instore/list/$', mes_views.packaging_instore_list),
url(r'^mes/packaging/instore/edit/$', mes_views.packaging_instore_edit),
url(r'^mes/packaging/instore/edit/(?P<id>\d+)/$', mes_views.packaging_instore_edit),
url(r'^mes/packaging/inventory/(?P<what>\w+)/$', mes_views.packaging_inventory),
url(r'^mes/packaging/receive/list/$', mes_views.packaging_receive_list),
# url(r'^mes/packaging/receive/$', mes_views.packaging_receive),
url(r'^mes/packaging/receive/(?P<id>\d+)/$', mes_views.packaging_receive),
url(r'^mes/storehouse/$', mes_views.edit_Storehouse),
......
......@@ -181,7 +181,10 @@ def edit_obj(request,obj_name,id=None):
# 2022-09-19
'deliverynote':['发货单明细','inventory','DeliveryNote'],
'inspection_report': ['质检报告','company','InspectionReport']
'inspection_report': ['质检报告','company','InspectionReport'],
#lisin 2024-08-23
'companyunit':['计量单位','mes','CompanyUnit'],
}
if obj_name not in d:
......@@ -923,9 +926,9 @@ def edit_obj(request,obj_name,id=None):
obj.company_id=cid
#for u in CompanyUnit.objects.filter(company_id=cid,category=2):
# units.append([{'id':u.unit.id,'name':u.unit.name}])
form = MaterialsForm(instance=obj)
form = PackagingForm(instance=obj)
elif request.method == "POST":
form = MaterialsForm(request.POST, instance=obj)
form = PackagingForm(request.POST, instance=obj)
if form.is_valid():
form.save()
is_saved = True
......@@ -1121,6 +1124,16 @@ def edit_obj(request,obj_name,id=None):
#m.company_id = request.user.company_id
m.save()
is_saved=True
#lisin 2024-09-22 计量单位
elif obj_name == 'companyunit':
if request.method == 'GET':
form = CompanyunitForm(instance=obj)
elif request.method == "POST":
form = CompanyunitForm(request.POST, instance=obj)
if form.is_valid():
form.save()
is_saved = True
return render(request,'obj/edit_companyunit.html',{'form':form,'is_saved':is_saved,'units':[]})
return render(request, 'obj/'+obj_name+'.html', {'form': form, 'is_saved':
is_saved,'is_show':is_show})
......@@ -3937,7 +3950,7 @@ def list_obj(request, obj):
#2021-05-29
elif obj=='companyunit':
data['clmns']=[_("计量单位"),_('代码'),('基准转换率'),_("默认单位"),_("计量类别"),_("计量标的物"),_("备注说明") ]
data['clmns']=[_("计量标的物"),_("计量类别"),_("计量单位"),_('代码'),('基准转换率'),_("默认单位"),_("备注说明") ]
s="select a.id,coalesce(a.remark,''),case when a.is_default then '是' else '否' end,"+\
"(select name from mes_measure where id=a.measure_id),"+\
......@@ -3952,7 +3965,7 @@ def list_obj(request, obj):
cur.execute(s)
for r in cur.fetchall():
a=''
data['data'].append([ r[5],r[6],r[7],r[2],r[3],r[4],r[1] ])
data['data'].append([ r[4],r[3],r[5],r[6],r[7],r[2],r[1] ])
elif obj=='materials':
data['clmns']=["原材料名称","编码","计量类别","备注说明"]
......@@ -3983,7 +3996,9 @@ def list_obj(request, obj):
elif obj=='packaging':
data['clmns']=["包装物料名称","编码","计量类别","规格","基础单位","备注说明",'添加供应商']
s="select id,name,coalesce(code,''),coalesce(remark,''),"+\
"coalesce((select name from mes_measure where id=measure_id),'') "+\
"coalesce((select name from mes_measure where id=measure_id),''),"+\
"coalesce(specification,''), " +\
"case when unit_id IS NOT NULL THEN (select name from mes_unit where id=unit_id) else '' end "+\
"from mes_packaging where company_id="+str(u.ancestor_id)+" and is_delete=false"
cur.execute(s)
show_add=u.has_perm('company.sys_admin')
......@@ -3994,7 +4009,7 @@ def list_obj(request, obj):
else:
a=r[1]
end=str('无权限')
data['data'].append([ a,r[2],r[4],'/','/',r[3],end ])
data['data'].append([ a,r[2],r[4],r[5],r[6],r[3],end ])
elif obj=='bom':
data['clmns']=["物料单编码","产成品名称","原材料配比","半成品配比","包装物料耗用"]
s="select id,name,coalesce(code,''), "+\
......@@ -4705,11 +4720,6 @@ def packaging_supplier_manage(request,id=None):
obj.company=request.user.company
obj.company_id=request.user.company.id
units_pkg=[]
#3;"PKG";"包装材料"
# for uu in CompanyUnit.objects.filter(company_id=cid,invtype=3):
# units_pkg.append(uu.unit)
if request.method == 'GET':
form = PackagingForm(instance=obj)
......@@ -4725,10 +4735,6 @@ def packaging_supplier_manage(request,id=None):
is_saved = True
if formset_v.is_valid():
formset_v.save()
else:
for form in formset_v.forms:
if not form.is_valid():
print('form---',form.errors)
return render(request,'obj/packaging_supplier_manage.html',
{'form':form,'is_saved':is_saved,
......
......@@ -4,6 +4,7 @@ from django.forms import ModelForm
from .models import *
from django.utils.translation import gettext_lazy as _
from datetime import datetime
......@@ -182,6 +183,14 @@ class CustomerForm(ModelForm):
'company':forms.HiddenInput(),
}
#lisin 2024-08-22
class CompanyunitForm(ModelForm):
class Meta:
model = CompanyUnit
fields='__all__'
widgets={
'company':forms.HiddenInput(),
}
# lisin
class PackagingForm(ModelForm):
......@@ -189,7 +198,8 @@ class PackagingForm(ModelForm):
model=Packaging
fields='__all__'
widgets={
'code': forms.TextInput(attrs={'readonly': 'readonly'}),
'company': forms.HiddenInput(),
# 'code': forms.TextInput(attrs={'readonly': 'readonly'}),
}
class CompanyForm(ModelForm):
class Meta:
......@@ -215,3 +225,51 @@ class PackagingVendorForm(ModelForm):
PackagingVendorFormset=forms.inlineformset_factory(Packaging, PackagingVendor,
form=PackagingVendorForm, extra=0, can_delete=True)
class PackagingPurchaseRecordForm(ModelForm):
class Meta:
model = PackagingPurchasRecord
fields='__all__'
widgets={
'company':forms.HiddenInput(),
}
def __init__(self, *args, **kwargs):
self._user = kwargs.pop('user')
super(PackagingPurchaseRecordForm, self).__init__(*args, **kwargs)
self.fields['vendor'].queryset = Vendor.objects.filter(company_id=self._user.company.id)
self.fields['packaging'].queryset = Packaging.objects.filter(company_id=self._user.company.id)
class PackagingInstoreForm(ModelForm):
class Meta:
model = PackagingInstore
fields='__all__'
widgets={
'code': forms.TextInput(attrs={'readonly': 'readonly'}),
'company':forms.HiddenInput(),
# 'Packaging':forms.HiddenInput()
}
def __init__(self, *args, **kwargs):
self._user = kwargs.pop('user')
super(PackagingInstoreForm, self).__init__(*args, **kwargs)
# 获取当前时间并格式化
now = datetime.now()
formatted_time = now.strftime("%Y%m%d%H%M%S")
self.fields['code'].initial = f'RK{formatted_time}'
print(f"Setting code initial value to: RK{formatted_time}")
self.fields['packaging_purchas'].queryset = PackagingPurchasRecord.objects.filter(company_id=self._user.company.id)
self.fields['packaging_purchas'].label_from_instance = lambda obj: obj.code
class PackagingReceiveForm(ModelForm):
class Meta:
model = PackagingReceive
fields='__all__'
widgets={
'company':forms.HiddenInput(),
}
def __init__(self, *args, **kwargs):
self._user = kwargs.pop('user')
super(PackagingReceiveForm, self).__init__(*args, **kwargs)
self.fields['packaging'].queryset = Packaging.objects.filter(company_id=self._user.company.id)
\ No newline at end of file
......@@ -109,8 +109,8 @@ class CompanyUnit(models.Model):
#category=models.SmallIntegerField( _('计量标的物'), choices=((1,_('原材料')), (2,_('半成品')), (3,_('包装材料'))) )
is_default=models.BooleanField(_('是否为默认计量单位'),default=False)
remark=models.CharField(_('备注说明'),max_length=50,blank=True,null=True)
dt = models.DateField(_('日期'), default=now, db_index=True)
tm = models.DateTimeField(_('时间'), default=now)
dt = models.DateField(_('日期'), default=now, db_index=True,blank=True,null=True)
tm = models.DateTimeField(_('时间'), default=now,blank=True,null=True)
is_delete=models.BooleanField(_('是否已删除'),default=False)
class Meta:
......@@ -121,6 +121,10 @@ class CompanyUnit(models.Model):
def __str__(self):
return self.name
@property
def name(self):
return str(self.unit)
#原材料
......@@ -178,6 +182,7 @@ class Packaging(models.Model):
units=models.JSONField(_('计量单位'),default=list,blank=True,null=True)
safety_qty=models.IntegerField(_('基准单位安全库存量'),blank=True,null=True)
specification=models.CharField(_('规格'),max_length=50,blank=True,null=True)
unit=models.ForeignKey(Unit,verbose_name=_('基础单位'),on_delete=models.CASCADE)
remark=models.CharField(_('备注说明'),max_length=50,blank=True,null=True)
dt = models.DateField(_('日期'), default=now, db_index=True,blank=True,null=True)
tm = models.DateTimeField(_('时间'), default=now,blank=True,null=True)
......@@ -208,6 +213,75 @@ class PackagingVendor(models.Model):
def __str__(self):
return self.name
#包材采购记录 lisin 2024-08-23
class PackagingPurchasRecord(models.Model):
code=models.CharField(_('采购单编码'),max_length=20,blank=True,null=True)
remark=models.CharField(_('备注说明'),max_length=50,blank=True,null=True)
company=models.ForeignKey(Company,verbose_name=_('所属企业'),on_delete=models.CASCADE)
packaging=models.ForeignKey(Packaging,verbose_name=_('包材'),on_delete=models.CASCADE)
vendor=models.ForeignKey(Vendor,verbose_name=_('供应商'),on_delete=models.CASCADE)
qty=models.IntegerField(_('数量'))
unit_price=models.DecimalField(_('单价'), max_digits=8, decimal_places=2)
total_price=models.DecimalField(_('总价'), max_digits=8, decimal_places=2)
dt = models.DateField(_('采购日期'), default=now, db_index=True,blank=True,null=True)
tm = models.DateTimeField(_('采购时间'), default=now,blank=True,null=True)
class Meta:
verbose_name = _('包材采购记录')
verbose_name_plural = _('包材采购记录')
unique_together = ("company", "packaging", "vendor")
def __str__(self):
return self.name
#包材入库记录 lisin 2024-08-24
class PackagingInstore(models.Model):
code=models.CharField(_('入库编码'),max_length=20,blank=True,null=True)
remark=models.CharField(_('备注说明'),max_length=50,blank=True,null=True)
company=models.ForeignKey(Company,verbose_name=_('所属企业'),on_delete=models.CASCADE)
packaging=models.ForeignKey(Packaging,verbose_name=_('包材'),on_delete=models.CASCADE)
packaging_purchas=models.ForeignKey(PackagingPurchasRecord,verbose_name=_('包材采购记录'),on_delete=models.CASCADE)
instore_num = models.IntegerField(_('入库数量'))
dt = models.DateField(_('入库日期'), default=now, db_index=True,blank=True,null=True)
tm = models.DateTimeField(_('入库时间'), default=now,blank=True,null=True)
class Meta:
verbose_name = _('包材入库记录')
verbose_name_plural = _('包材入库记录')
unique_together = ("code","company")
def __str__(self):
return self.code
#包材领用记录 lisin 2024-08-24
class PackagingReceive(models.Model):
code=models.CharField(_('领用编码'),max_length=20,blank=True,null=True)
remark=models.CharField(_('备注说明'),max_length=50,blank=True,null=True)
company=models.ForeignKey(Company,verbose_name=_('所属企业'),on_delete=models.CASCADE)
packaging=models.ForeignKey(Packaging,verbose_name=_('包材'),on_delete=models.CASCADE)
receive_num=models.IntegerField(_('领用数量'))
dt = models.DateField(_('领用日期'), default=now, db_index=True,blank=True,null=True)
tm = models.DateTimeField(_('领用时间'), default=now,blank=True,null=True)
class Meta:
verbose_name = _('包材领用记录')
verbose_name_plural = _('包材领用记录')
unique_together = ("code","company")
#包材库存
class PackagingInventory(models.Model):
code=models.CharField(_('库存编码'),max_length=20,blank=True,null=True)
company=models.ForeignKey(Company,verbose_name=_('所属企业'),on_delete=models.CASCADE)
packaging=models.ForeignKey(Packaging,verbose_name=_('包材'),on_delete=models.CASCADE)
num=models.IntegerField(_('库存数量'))
dt = models.DateField(_('日期'), default=now, db_index=True,blank=True,null=True)
tm = models.DateTimeField(_('时间'), default=now,blank=True,null=True)
remark=models.CharField(_('备注说明'),max_length=50,blank=True,null=True)
class Meta:
verbose_name = _('包材库存')
verbose_name_plural = _('包材库存')
unique_together = ("code","company")
#物料单
......@@ -278,6 +352,8 @@ class BOMpackaging(models.Model):
remark=models.CharField(_('备注说明'),max_length=50,blank=True,null=True)
dt = models.DateField(_('日期'), default=now, db_index=True,blank=True,null=True)
tm = models.DateTimeField(_('时间'), default=now,blank=True,null=True)
forecast = models.DecimalField(_('预估单价'), max_digits=8, decimal_places=2,blank=True,null=True)
specification=models.CharField(_('规格'),max_length=50,blank=True,null=True)
class Meta:
verbose_name = _('包材用料单')
......@@ -623,19 +699,3 @@ class LabelBindXG(models.Model):
class Meta:
verbose_name = _('箱盖')
verbose_name_plural = _('箱盖')
\ No newline at end of file
#包材供应商 lisin 2024-08-20
class PackagingVendor(models.Model):
company=models.ForeignKey('company.Company',verbose_name=_('所属企业'),on_delete=models.CASCADE)
packaging=models.ForeignKey(Packaging,verbose_name=_('包装材料'),related_name='packingVendor_pkg',on_delete=models.CASCADE)
vendor=models.ForeignKey(Vendor,verbose_name=_('供应商'),related_name='packingVendor_vendor',on_delete=models.CASCADE)
unit_price=models.DecimalField(_('单价'), max_digits=8, decimal_places=2)
dt = models.DateField(_('日期'), default=now, db_index=True,blank=True,null=True)
tm = models.DateTimeField(_('时间'), default=now,blank=True,null=True)
remark=models.CharField(_('备注说明'),max_length=50,blank=True,null=True)
class Meta:
verbose_name = _('包装供应商')
verbose_name_plural = _('包装供应商')
def __str__(self):
return self.name
\ No newline at end of file
差异被折叠。
......@@ -437,6 +437,10 @@
</li>
<li><a><i class="fa fa-bar-chart-o"></i> {% trans '库存管理' %} <span class="fa fa-chevron-down"></span></a>
<ul class="nav child_menu">
<li><a class="l-a" href="mes/packaging/purchase/list/">{% trans '包装材料采购' %}</a></li>
<li><a class="l-a" href="mes/packaging/instore/list/">{% trans '包装材料入库(根据采购订单)' %}</a></li>
<li><a class="l-a" href="mes/packaging/receive/list/">{% trans '包装材料领用' %}</a></li>
<li><a class="l-a" href="mes/packaging/inventory/list/">{% trans '包装材料库存报表' %}</a></li>
<li><a class="l-a" href="/mes/list/batch/25/">{% trans '原材料入库' %}</a></li>
<li><a class="l-a" href="/mes/list/batch/26/">{% trans '原材料出库' %}</a></li>
<li><a class="l-a" href="/mes/list/batch/33/">{% trans '半成品入库' %}</a></li>
......
......@@ -234,7 +234,11 @@
'<td><span class="mat_name">'+label+'</span></td>'+
'<td><input type="number" step="0.01" value="'+$('#pkg_qty').val()+'" class="form-control" '+
'id="id_bompackaging_bom-'+count+'-qty" name="bompackaging_bom-'+count+'-qty" /></td>'+
'<td><input type="sting" value="'+$('#pkg_qty').val()+'" class="form-control" '+
'id="id_bompackaging_bom-'+count+'-specification" name="bompackaging_bom-'+count+'-specification" /></td>'+
'<td>'+$('#pkg_unit').find("option:selected").text()+'</td>'+
'<td><input type="number" value="'+$('#pkg_qty').val()+'" class="form-control" '+
'id="id_bompackaging_bom-'+count+'-forecast" name="bompackaging_bom-'+count+'-forecast" /></td>'+
'</tr>';
$('#tb_pkg tbody').append(html);
$(prefix+'TOTAL_FORMS').attr('value', (count+1));
......@@ -397,7 +401,9 @@
<th>{% trans '删除' %}</th>
<th>{% trans '包装材料名称 ' %}</th>
<th>{% trans '数量 ' %}</th>
<th>{% trans '规格' %}</th>
<th>{% trans '单位' %}</th>
<th>{% trans '预计单价' %}</th>
</tr></thead>
<tbody>
{% for f in formset_p %}
......@@ -406,7 +412,9 @@
<td>{{f.DELETE}}</td>
<td>{{ f.instance.packaging.name }}</td>
<td>{{ f.qty }}</td>
<td>{{ f.instance.specification.name }}</td>
<td>{{ f.instance.unit.name }}</td>
<td>{{ f.instance.forecast.name }}</td>
</tr>
{% endfor %}
</tbody>
......
{% extends 'obj_form.html' %}
{% load i18n %}
{% load tj_filters %}
{% block css %}
{{ block.super }}
{% endblock %}
{% block js %}
{{ block.super }}
$('.btn-save').click(function(){
$.SubmitForm('#obj_form form','{{request.path}}');
});
{% endblock %}
{% block subtitle-1 %}
{% trans '库存管理' %}
{% endblock %}
{% block subtitle-2 %}
{% trans '包装材料入库' %}
{% endblock %}
{% block form_content %}
{{ block.super }}
<script type="text/javascript">
$(document).ready(function() {
//生成设置 日期编码
var now = new Date();
var year = String(now.getFullYear());
var month = String(now.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1并补零
var day = String(now.getDate()).padStart(2, '0');
var hours = String(now.getHours()).padStart(2, '0');
var minutes = String(now.getMinutes()).padStart(2, '0');
var seconds = String(now.getSeconds()).padStart(2, '0');
var defaultCodeValue = 'RK' + year + month + day + hours + minutes + seconds;
$('#id_code').val(defaultCodeValue);
//入库数量校验
$('#id_instore_num').on('input', function(){
var purchase_num= $('#qty').val()*1;
var instore_num = $(this).val()*1;
if(purchase_num && instore_num){
if(instore_num > purchase_num){
toastr.error('入库数量不能大于采购数量');
$('#id_instore_num').val('');
}
}
})
// 监听code字段的变化
$('#id_packaging_purchas').on('change', function() {
var id = $(this).val();
console.log('codeValue--',id)
// 发送AJAX请求获取相关数据
$.ajax({
url: '/mes/query/packaging/purchase/',
method: 'GET',
data: { id: id },
success: function(response) {
// 在页面上显示相关数据
console.log('packagingPurchasRecord',response)
const {
dt,
qty,
packaging_id,packaging_code, packaging_name, packaging_specification,
vendor_name
}=response
$('#dt').val(dt);
$('#id_packaging').val(packaging_id);
$('#packaging_code').val(packaging_code);
$('#packaging_name').val(packaging_name);
$('#packaging_specification').val(packaging_specification);
$('#vendor_name').val(vendor_name);
$('#qty').val(qty);
},
error: function(xhr, status, error) {
console.error('AJAX请求失败:', error);
}
});
});
});
</script>
<input type='hidden' type="number" value="" name="packaging" id="id_packaging" />
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '入库编码:' %} </label>
<div class="col-sm-10">{{ form.code }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '入库时间:' %} </label>
<div class="col-sm-10">{{ form.dt }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '采购编号:' %} </label>
<div class="col-sm-10">{{ form.packaging_purchas }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '采购时间:' %} </label>
<div class="col-sm-10">
<input type="text" disabled name='dt' id='dt' />
</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '包材编码:' %} </label>
<div class="col-sm-10">
<input type="text" disabled name='packaging_code' id='packaging_code' />
</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '包材名称:' %} </label>
<div class="col-sm-10">
<input type="text" disabled name='packaging_name' id='packaging_name' />
</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '规格:' %} </label>
<div class="col-sm-10">
<input type="text" disabled name='packaging_specification' id='packaging_specification' />
</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '供应商:' %} </label>
<div class="col-sm-10">
<input type="text" disabled name='vendor_name' id='vendor_name' />
</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '采购数量:' %} </label>
<div class="col-sm-10">
<input type="text" disabled name='qty' id='qty' />
</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '入库数量:' %} </label>
<div class="col-sm-10">{{ form.instore_num }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '备注说明:' %} </label>
<div class="col-sm-10">{{ form.remark }}</div>
</div>
<div>
<a class="btn btn-primary btn-save" type="submit" style="float:right;">{% trans '保存' %}</a>
</div>
{% endblock %}
{% extends 'obj_form.html' %}
{% load i18n %}
{% load tj_filters %}
{% block css %}
{{ block.super }}
{% endblock %}
{% block js %}
{{ block.super }}
$('.btn-save').click(function(){
$.SubmitForm('#obj_form form','{{request.path}}');
});
{% endblock %}
{% block subtitle-1 %}
{% trans '库存管理' %}
{% endblock %}
{% block subtitle-2 %}
{% trans '包装材料采购' %}
{% endblock %}
{% block form_content %}
{{ block.super }}
<script type="text/javascript">
$(document).ready(function() {
//生成设置 日期编码
var now = new Date();
var year = String(now.getFullYear());
var month = String(now.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1并补零
var day = String(now.getDate()).padStart(2, '0');
var hours = String(now.getHours()).padStart(2, '0');
var minutes = String(now.getMinutes()).padStart(2, '0');
var seconds = String(now.getSeconds()).padStart(2, '0');
var defaultCodeValue = 'CG' + year + month + day + hours + minutes + seconds;
$('#id_code').val(defaultCodeValue);
function calculateTotalPrice() {
var qty = parseFloat($('#id_qty').val()) || 0;
var unitPrice = parseFloat($('#id_unit_price').val()) || 0;
var totalPrice = qty * unitPrice;
console.log('totalPrice---',totalPrice)
$('#id_total_price').val(totalPrice.toFixed(2));
}
$('#id_qty, #id_unit_price').on('input', function() {
calculateTotalPrice();
});
// 初始计算
calculateTotalPrice();
});
</script>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '采购编码:' %} </label>
<div class="col-sm-10">{{ form.code }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '采购时间:' %} </label>
<div class="col-sm-10">{{ form.dt }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '包材:' %} </label>
<div class="col-sm-10">{{ form.packaging }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '供应商:' %} </label>
<div class="col-sm-10">{{ form.vendor }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '采购数量:' %} </label>
<div class="col-sm-10">{{ form.qty }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '采购单价:' %} </label>
<div class="col-sm-10">{{ form.unit_price }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '采购总价:' %} </label>
<div class="col-sm-10">{{ form.total_price }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '备注说明:' %} </label>
<div class="col-sm-10">{{ form.remark }}</div>
</div>
<div>
<a class="btn btn-primary btn-save" type="submit" style="float:right;">{% trans '保存' %}</a>
</div>
{% endblock %}
{% extends 'obj_form.html' %}
{% load i18n %}
{% load tj_filters %}
{% block css %}
{{ block.super }}
{% endblock %}
{% block js %}
{{ block.super }}
$('.btn-save').click(function(){
$.SubmitForm('#obj_form form','{{request.path}}');
});
{% endblock %}
{% block subtitle-1 %}
{% trans '库存管理' %}
{% endblock %}
{% block subtitle-2 %}
{% trans '包装材料领用' %}
{% endblock %}
{% block form_content %}
{{ block.super }}
<script type="text/javascript">
$(document).ready(function() {
//生成设置 日期编码
var now = new Date();
var year = String(now.getFullYear());
var month = String(now.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1并补零
var day = String(now.getDate()).padStart(2, '0');
var hours = String(now.getHours()).padStart(2, '0');
var minutes = String(now.getMinutes()).padStart(2, '0');
var seconds = String(now.getSeconds()).padStart(2, '0');
var defaultCodeValue = 'LY' + year + month + day + hours + minutes + seconds;
$('#id_code').val(defaultCodeValue);
//库存数量校验
$('#id_receive_num').on('input', function(){
var inventory_num = $('#inventory_num').val()*1;
var receive_num = $(this).val()*1;
if(receive_num>inventory_num){
toastr.error('领取数量不能大于库存数量!');
var receive_num = $(this).val('');
}
})
//根据包材id 查询库存、包材信息
$('#id_packaging').on('change', function() {
var id = $(this).val();
console.log('codeValue--',id)
// 发送AJAX请求获取相关数据
$.ajax({
url: '/mes/packaging/inventory/query/',
method: 'GET',
data: { id: id },
success: function(response) {
// 在页面上显示相关数据
console.log('packagingPurchasRecord',response)
const {
dt,
inventory_num,
packaging_code, packaging_name, packaging_specification,
vendor_name
}=response
$('#dt').val(dt);
$('#packaging_code').val(packaging_code);
$('#packaging_name').val(packaging_name);
$('#packaging_specification').val(packaging_specification);
$('#inventory_num').val(inventory_num);
},
error: function(xhr, status, error) {
console.error('AJAX请求失败:', error);
}
});
});
});
</script>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '领用编码:' %} </label>
<div class="col-sm-10">{{ form.code }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '领用时间:' %} </label>
<div class="col-sm-10">{{ form.dt }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '包材名称:' %} </label>
<div class="col-sm-10">{{ form.packaging }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '包材编码:' %} </label>
<div class="col-sm-10">
<input type="text" disabled name='packaging_code' id='packaging_code' />
</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '规格:' %} </label>
<div class="col-sm-10">
<input type="text" disabled name='packaging_specification' id='packaging_specification' />
</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '现有库存数量:' %} </label>
<div class="col-sm-10">
<input type="text" disabled name='inventory_num' id='inventory_num' />
</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '领用数量:' %} </label>
<div class="col-sm-10">{{ form.receive_num }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '备注说明:' %} </label>
<div class="col-sm-10">{{ form.remark }}</div>
</div>
<div>
<a class="btn btn-primary btn-save" type="submit" style="float:right;">{% trans '保存' %}</a>
</div>
{% endblock %}
{% extends 'obj_form.html' %}
{% load i18n %}
{% load tj_filters %}
{% block css %}
{{ block.super }}
{% endblock %}
{% block js %}
{{ block.super }}
$('.btn-save').click(function(){
$.SubmitForm('#obj_form form','{{request.path}}');
});
{% endblock %}
{% block subtitle-1 %}
{% trans '物料信息' %}
{% endblock %}
{% block subtitle-2 %}
{% trans '计量单位' %}
{% endblock %}
{% block form_content %}
{{ block.super }}
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '物料类型:' %} </label>
<div class="col-sm-10">{{ form.invtype }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '计量类别:' %} </label>
<div class="col-sm-10">{{ form.measure }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '计量单位:' %} </label>
<div class="col-sm-10">{{ form.unit }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '是否默认计量单位:' %} </label>
<div class="col-sm-1">{{ form.is_default }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '备注说明:' %} </label>
<div class="col-sm-10">{{ form.remark }}</div>
</div>
<div>
<a class="btn btn-primary btn-save" type="submit" style="float:right;">{% trans '保存' %}</a>
</div>
{% endblock %}
......@@ -49,7 +49,7 @@
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '基础单位:' %} </label>
<div class="col-sm-10">{{ form.base_unit }}</div>
<div class="col-sm-10">{{ form.unit }}</div>
</div>
<div class="form-group ">
<label class="col-sm-2 control-label ">{% trans '备注说明:' %} </label>
......
......@@ -48,6 +48,7 @@
var b=false;
var id=$('#vendor_id').val();
var name=$('#vendor_label').val();
var company=$('#id_company').val()
<!-- var unit=$('#product_unit').val(); -->
var unit_price=$('#vendor_base_unit').val();
......@@ -77,8 +78,8 @@
$('#packaging-vendor tbody').append(compiledTmpl);
$(prefix+count+'-vendor').val(id);
$(prefix+count+'-unit_price').val(unit_price);
$(prefix+count+'-company').val(company);
$(prefix+'TOTAL_FORMS').attr('value', (count+1));
console.log('www---',id,prefix+count);
}
}
});
......@@ -127,23 +128,12 @@
{% trans "包装物料" %}
{% endblock %}
<span style="margin-left:10px; color:green; ">
{% block subtitle-3 %}
{% if form.instance.id %}
{% trans "修改" %}
{% else %}
{% trans "新建" %}
{% endif %}
{% endblock %}
</span>
{% block form_content %}
{{ block.super }}
<input type="hidden" name="company" value="{{company}}" id="id_company" class="form-control">
<div class="form-group ">
<label class="col-sm-1 control-label ">{% trans '物料编号' %} </label>
<div class="col-sm-5">{{ form.code }}</div>
......@@ -156,9 +146,11 @@
<div class="form-group ">
<label class="col-sm-1 control-label ">{% trans '计量类别' %} </label>
<div class="col-sm-2">{{ form.measure }}</div>
</div>
<label class="col-sm-1 control-label ">{% trans '所属企业' %} </label>
<div class="col-sm-2">{{ company }}</div>
<div class="form-group ">
<label class="col-sm-1 control-label ">{% trans '基础单位' %} </label>
<div class="col-sm-2">{{ form.unit }}</div>
</div>
......@@ -211,7 +203,8 @@
{% block fmset %}
<table style="display:none;">
<tr id="id_packagingvendor_set-__prefix__" >
<td>{{formset_v.empty_form.DELETE}}{{formset_v.empty_form.id}}{{formset_v.empty_form.status}}</td>
<input type="hidden" value="{{company}}" name="company" />
<td>{{formset_v.empty_form.DELETE}}{{formset_v.empty_form.id}}{{formset_v.empty_form.status}}{{formset_v.empty_form.company}}</td>
<td>{{formset_v.empty_form.vendor}}<span class='vendor'></span></td>
<td>{{formset_v.empty_form.unit_price}}</td>
<!-- <td>{{formset_v.empty_form.package_id}}</td> -->
......@@ -220,17 +213,6 @@
</table>
{{ formset_v.management_form }}
<!-- <table style="display:none;">
<tr id="id_schemematerials_set-__prefix__" >
<td>{{mset.empty_form.DELETE }}{{mset.empty_form.id}}{{mset.empty_form.status}}</td>
<td>{{mset.empty_form.material}}<span class='material'></span></td>
<td>{{mset.empty_form.unit_price}}</td>
<td>{{mset.empty_form.remark}}</td>
</tr>
</table>
{{ mset.management_form }} -->
<div class="x_panel" id='packaging-vendor'>
<div class="x_title">
<h2 style='font-size:15px;'><i class="fa fa-gift"></i> 供应商 </h2>
......@@ -275,7 +257,7 @@
<tbody>
{% for f in formset_v %}
<tr>
<td>{{f.DELETE}}{{f.id}}{{f.status}}</td>
<td>{{f.DELETE}}{{f.id}}{{f.status}}{{f.company}}</td>
<td>{{f.vendor}}<span class='vendor'>{{f.instance.vendor.name}}</span></td>
<td>{{f.unit_price}}</td>
<!-- <td>{{f.package_id}}</td> -->
......@@ -288,58 +270,6 @@
</div>
</div>
<!-- <div class="x_panel" id='scheme-material'>
<div class="x_title">
<h2 style='font-size:15px;'><i class="fa fa-gift"></i> 促销物料 </h2>
<ul class="nav navbar-right panel_toolbox">
<li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-wrench"></i></a>
<ul class="dropdown-menu" role="menu">
<li><a href="#">Settings 1</a>
</li>
<li><a href="#">Settings 2</a>
</li>
</ul>
</li>
<li><a class="close-link"><i class="fa fa-close"></i></a>
</li>
</ul>
<div class="clearfix"></div>
</div>
<div class="x_content">
<div class="form-group ">
<div class='col-sm-6'><input id='material_label' placeholder='物料名称'><input type='hidden' id='material_id'></div>
<div class='col-sm-2'><input id='material_unit_price' placeholder='数量'></div>
<span class="input-group-btn"><button type="button" class="btn btn-success add-material">
<span class='glyphicon glyphicon-arrow-down'></span></button></span>
</div>
<div class='table-responsive' style='padding:10px;'>
<table class="table table-condensed table-bordered table-hover">
<thead>
<th style='width:5%;'>删除</th>
<th style='width:45%;'>物料名称</th>
<th style='width:10%;'>数量</th>
<th style='width:45%;'>备注</th>
</thead>
<tbody>
{% for f in mset %}
<tr>
<td>{{f.DELETE}}{{f.id}}{{f.status}}</td>
<td>{{f.material}}<span class='material'>{{f.instance.material.name}}</span></td>
<td>{{f.unit_price}}</td>
<td>{{f.remark}}</td>
</tr>
{% endfor %}
</tbody>
</table></div>
</div>
</div> -->
<div> <a class="btn btn-primary btn-save" type="submit" style="float:right;">{% trans '保存' %}</a></div>
{% endblock %}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论