# srm2022 **Repository Path**: lan9635/srm2022 ## Basic Information - **Project Name**: srm2022 - **Description**: Supplier Manager System - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-12-07 - **Last Updated**: 2025-05-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README <<<<<<< HEAD ## SRM Supplier Relationship Management #### License MIT # bench start # bench new-site # bench use site-name # bench new-app # bench install-app app-name # create doctype # create workspace ### 四步法启用后台自动计划(预定作业) scheduled-job-type, scheduled-job-log # bench --site site-name enable-scheduler # bench --site site-name console # from frappe.core.doctype.scheduled_job_type.scheduled_job_type import sync_jobs # sync_jobs() # frappe.db.commit() # 设置hook.py的scheduler_events ## 为了初始化导入物料及供应商,取消了很多必录项或者检验合法性检查 ## 1. srm_supplier_informal查询条件用法搞定 ## 2. 二级及三级供应商Doctype完善 ## 3. Module Profile导出安装直接携带 ## 4. 遗留:只有分享后才允许看到档案资料,光有【用户权限】还不行? ## 5. 研发-打样申请Doctype完善 ## 1. 研发-打样申请Doctype完善 ## 1. 标准回样日期根据物料组属性的standard_lead_time进行自动计算 ## 1. SRM Sample Request携带默认供应商的邮箱,之前是失败在JS的异步执行上,放在then后面确保有效 ## 2. 发送供应商邮件并且抄送自我 ## 3. SRM Sample Request相关的字段配置有条件的只读属性:eval:doc.workflow_state != 'Save' ## 1. 自动生成样品承认单 ## 2. 手动新增【选择申请单】 ## 3. 生成承认单后的申请单关闭问题:暂时用整单字段admit_closed来关闭没有行关闭 ## 1. UNIONMAN_WS1@unionman.com.cn(UMum123456) ## 2. SRM Supplier对修订源这个字段勾选忽略用户权限 ## 3. 采购入库SRM Purchase Instock Sub修正 ## 1. 在136.111的umsrm中导入供应商主数据,物料分组,物料主数据 ## 2. 导入workflow ## 3. 配置了发件邮箱 ## 4. 系统设置:密码策略,允许上传附件... ## 5. 用户导入完成,研发的角色授权完成 ## 6. 样品申请单增加实际回样数量、实际回样日期字段 ## 1. 设置附件上传最大值bench set-config max_file_size 50000000 209715200 ## 2. 安装了wkhtmltopdf ## 3. 变通实现供应商编码与供应商名称(同理用户及用户名称) ## 4. 低版本的chrome浏览器需要升级才能正常使用,不满足bootstrap要求 ## 5. 搞定邮件发送的附件问题,以及简单样式 ## 1. 打印模版 ## 2. 研发和采购的权限控制 ## 3. 自定义报表 ## 4. 修复Bug:after_insert比after_save好使,解决样品承认单中检测编号问题 ## 5. 修复Bug:因为定义了on_submit但没有代码造成提交完成后刷新自动回退 ## 6. 修复Bug:供应商被Link后不能按照名称检索,只能按照编码来检索。把【自动编号】取消即可? ## 7. 增加采购退回(在已提交时,退回,相当于拒绝判定) ## 8. 增加收回判定(在待收料时,收回判定到【已提交】重新走判定或者采购退回) ## 9. 把用户名称字段取消隐藏属性,报表输出可以自行选择 ## 10.初始化一个【公共邮箱】供应商,设置为二级供应商 ## 1. 增加[实际回料]操作JS ## 2. 变更[样品承认]的workflow ## 3. 自定义报表srm_sample_request ## 4. [样品承认]增加[编码审核]操作 ## 1. 打样申请的查询报表, IFNULL的使用, 颜色的使用 ## 1. 增加事业部-产品线 ## 2. [样品承认]审批流及资料组操作,ERP同步暂未实现 ## 1. leihui的统计报表 ## 2. 按天自动编码的实现 ## 1. 随着审批流的权限控制,先通过Doctype定义[是否只读先决条件]来实现 ## 2. 不同角色进入标准List的强制条件 ## 3. 不同角色进入标准List的默认条件filters ## 1. 因为自动编码表的权限【读和写】不足造成自动编码失败 ## 2. 因为SRM Sample Request的【提交】权限没给造成最后【收到】失败 ## 3. [承认单]如果选择了采购申请单号,需要限制"供应商"的下拉选择项&&只有一个供应商时直接set_value ## 1. [承认单]的列表查询,附件可链接下载提了gitee ## 2. [试产单]基本完成,待补充:同步ERP ## 3. [供应商]档案开放给采购维护联系人及邮箱 ## 1. 修复了邮件附件太大造成数据库读取失败:修改缓存区,修改my.cnf, [MySQLd] max_allowed_packet=256M (根据实际情况调整数值) ## 2. 优化发送邮件的JS,因为recipients可直接接收一个数组(多收件人列表) ## 3. 同一个供应商多个联系人需要接收邮件:用,号分隔 ## 4. [打样申请单]的列表查询实现附件可链接下载:concat函数应用 ## 1. 增加多组织,ORG与内部供应商关联,[承认单]已经增加ORG字段配置默认值 ## 2. 同步至ERP的资源清单、采购申请单验证 ## 3. 供应商档案的[管理]菜单操作Bug:frm.save('Update')这个不能干!!! ## 4. 雷慧的报表顺序调整 ## 5. 优化了field_update,可以call一次传递dict多个元素 ## 6. 发送邮件优化:邮件队列明确源单号便于追踪,admit_closed标识是否已经发送,再次发送有提示 ## 7. return_date在保存前检查,为空会自动更新 ## 8. 公共查询报表优化:初始条件,列宽,变字体色 ## 1. [承认单]公共查询报表 ## 2. [承认单]上传多个附件:标准功能可解决,多个上传,提交后的单据可上传 ## 3. [承认单]同步至ERP的资源清单 ## 4. [试产单]同步至ERP采购申请单 ## 5. [打样申请单]中的[回样日期]为空的Bug修复 ## 1. [样品承认文档]报表及[品质确认]功能 ## 2. [样品承认]补充附件的下载:点击单据后下载 ## 1. [承认单]同步至ERP的资源清单调试完成 ## 2. [试产单]同步至ERP采购申请单调试完成 ## 1. workflow中Hand In状态允许编辑角色修正应该为SRM Purchase ## 2. [承认单]自动生成[试产申请单]:有按钮生成或者编码审核后自动生成 ## 3. 按键添加样式.addClass('btn-primary')的妙用 ## 4. 历史数据的事后[修复]: bench console, frappe.db.set_value() + frappe.db.commit() ## 5. 修复[承认单]的自动编号 ## 1. [打样申请统计报表]重新优化 ## 2. [承认单]的样品数量取自[打样申请]中的[实收数量] ## 3. [打样申请]增加[特殊维护]功能 ## 4. [手板申请单]单据+审批流完成 ## 5. [开模申请单]单据+审批流完成 ## 6. [改模申请单]单据+审批流完成 ## 7. [采购订单]数据同步验证完成: 限制20条/次,10分钟一次同步, 创建后直接提交 ## 8. [样品承认单]公共查询:V1.0版 ## 1. [打样申请单][品质承认单]的自动编号统一修改为PY文件中的before_insert和auto_rename两个方法组合来实现,减少JS以及流水号的占用 ## 2. 从ERP数据同步的所有测试完成:[采购变更] OK ## 3. 从ERP数据同步的所有测试完成:[采购收料][采购退料][采购入库][采购退库][采购发票][采购费用] ## 4. [手板申请单]单据优化V1.0完成,before_workflow_action控制金额字段,公共查询 ## 5. [开模申请单]单据优化V1.0完成,公共查询 ## 6. [改模申请单]单据优化V1.0完成,before_workflow_action控制金额字段,公共查询 ## 7. 邮件乱码: 针对主题乱码优化了待验证 ## 1. 邮件乱码:取消,导致邮件发送失败 ## 1. 物料同步还有缺失:收料通知单UM01-CGSL221000452 ## 1. 结构组的三个单优化 ## 2. [打样申请(采购)]单据+报表,疑问1:关闭(采购员自己操作)? ## 1. YPSQ-20221011-032恢复 ## 1. 单据启用workflow后,日志记录的是单据的状态变化,不是记录[操作]事项 ## 2. 临时解决[承认单]中大最后一级(正式提交单据)时,不能根据[user]更新[username]问题 ## 3. frappe.db.set_value的应用,很多细节... ## 4. 附件上传:client_max_body_size 300m ## 1. [结构三个单]的审批流日志查询 ## 2. [User]批量更新first_name及full_name为中文名 ## 3. frm.set_df_property('material_model_2', 'reqd', 1),并且根据material_model_2自动填充ERP物料编码 ## 4. [样品承认]打印到一张纸上 ## 5. 根据规格型号自动获取ERP物料编码 ## 1. 写入ERP货源清单的逻辑实现: 没有记录直接新增; 如果已有记录并且是失效的则提示; 如果是已有记录未失效则进行失效并且新增 ## 2. Workflow Operation Log Query ## 1. 增加一个SRM Attachment角色,目的是为了在JS代码中操控[样品承认单]的附件只允许SRM Attachment角色操作 ## 1. 上传附件时直接覆盖旧附件(当前是先删除再上传):暂时冷处理 ## 1. 计划协同 ## 2. [样品承认]品质确认测试 ## 1. 供应商分类标准\供应商档案分类\供应商档案必录项完善\供应商编码与ERP编码的统一性? ## 2. 询价单优化 ## 3. 报价单优化:主动报价时物料编码如何限制供应商? ## 1. 比价单:[报价单]细节优化;[询价单-供方]不允许重复生成报价单,有报价后回写[跟进状态]为[已报价],关联[询价单]时不允许新增分录行 ## 2. 有漏的物料没同步过来: get_material_id_from_erp + init_sync_material_from_erp 初始化从ERP导入; get_material_from_erp根据编码从ERP同步 ## 3. 初始化物料导入:用while循环处理每次限制2000行问题 ## 1. 比价单:选中及反选中, 生成[SRM Price Compare], [比价单]提交后自动修改[询价单-供方]的[跟进状态]为[比价关闭] ## 2. 比价选中是否需要让供应商主动知道?即能自主查询 ## 1. [采购交期回复表-采购员]保存后自动分发(改为手动按键触发)[采购交期回复表-供应商], 自动邮件通知供应商(前提是[SRM User Default]有User)。 ## 2. [采购交期回复表-采购员]确认后自动把[采购交期回复表-供应商]的[确认]选中并且关闭不许重新回复 ## 3. [采购交期回复表-采购员]有新版本发布时: 谁在SRM中触发同步? 同步之前应该把原有的[采购交期回复表-采购员]和[采购交期回复表-供应商]取消最新版本 ## 1. [分配供应商]生成[采购交期回复表-供应商]修正 ## 2. [采购交期回复表-供应商]在答交时控制:根据订单行内码求和不允许超数并且不允许为0 ## 1. 补漏供应商:从ERP同步过来 ## 1. duplicate_row(d, copy_doc), 修复Bug行记录复制时不复制指定的字段并且要执行: bench build重新编译JS ## 1. [打样申请公共查询]增加[采购首次回复时间]和[超期天数]: 直接用Mysql的datediff函数和DATE_FORMAT格式化函数 ## 2. JS代码实现保存后直接审批:frappe.xcall('frappe.model.workflow.apply_workflow',{doc: frm.doc, action: 'Actioin'}) ## 3. [打样申请公共查询]完善符合采购宋经理诉求 """在bench console中批量更新'SRM Sample Request'的'approval_date' d = frappe.db.get_list('SRM Sample Request', filters={'workflow_state': ['not in', 'Save']}, fields=['name', 'approval', 'creation']) names = [] for i in d: ...: if i.approval: ...: names.append(i.name) for name in names: ...: date1 = frappe.db.get_value('SRM Sample Request', name, 'creation') ...: frappe.db.set_value('SRM Sample Request', name, 'approval_date', date1) frappe.db.commit() """ ## 4. [供应商]档案中ERP编码如何实现事同步: 实时同步,实时从API接口返回ERP编码进行回写 ## 5. [供应商]档案中的更新: 联系人更新、银行帐户更新、可供应商品更新、类别更新---暂时是配置为允许[提交]后修改,并且通过JS代码控制管理员可修改 ## 1. 供应商可以下载公共文档: 配置一个web-page + HTML {{ name01 }}
{{ name02 }} doc = frappe.get_doc("SRM Public Download", "ef512a98f2") context.url01 = doc.server_url + doc.items[0].upload_file context.name01 = doc.items[0].title context.url02 = doc.server_url + doc.items[1].upload_file context.name02 = doc.items[1].title ## 2. 供应商分配用户优化:根据联系人记录行选择进行分配,不受档案状态影响 ## 1. 邀请供应商账户一起完善文档资料: 经过验证,[分享]功能最能匹配,配合完了取消分享即可,方便。 ## 1. 对账单前奏: 送/收/退,标准流程 ## 2. gitee ## 1. [承认单]增加[打回]并且打回后要清空相关的字段 ## 1. [打样申请]中的[采购交期回复]优化"默认供应商" ## 2. [送货单]: 保存及删除后,[采购订单]的[relation_qty]连动验证OK ## 3. [送货单]: 提交及取消后,[采购订单]的[delivery_qty]连动验证OK, 需要用on_submit和on_cancel方法 ## 4. [送货单]: 取消后删除,[采购订单]不会有任何变化 ## 1. 增加[文件修改申请单]可以上传 ## 2. [送货单]与[入库单]的[核销], 作为对帐依据 ## 1. SRM Delivery Checking,送货收货勾对明细 ## 1. 用doc.add_comment替代审批流日志 ## 2. 对账单一条龙:采购订单--送货单---收料---退料----退库----扣费用---对账 ## 1. 试产申请同步ERP完善及测试账套验证: 不允许重复生成;根据成功的ERP单号反写;同步ERP的表头[备注]及表体[备注]字段 ## 1. 试产申请同步ERP完善: 在frappe.call未完成前不允许操作系统。 ## 1. 物料同步中增加ignore_permissions=True ## 1. 所有frappe.db.get_list中增加ignore_permissions=True ## 2. [试产申请单]生成ERP时携带供应商 ## 1. 九联SRM【样品承认单】的“物料名称”: 1. 允许提交后修改; 2. 忽略用户权限; 3. 字段内容为空时才获取 ## 2. 手板申请单调整审批流及公共查询报表 ## 3. 开模申请单调整审批流及公共查询报表 ## 4. 改模申请单调整审批流及公共查询报表 ## 1. 同步ERP的[供应商协同采购回复(九联)] ## 1. 对账单 ## 1. 对账单完善 ## 2. 结构组的三个单优化【金额】字段 ## 1. 样品承认单[更新规格型号]按键 ## 1. 采购对账单必填字段并且保存后才允许获取出入库单; 对账日期范围检查:不允许重复(在PY中before_save) ## 2. SRM供应商同步至ERP并且根据返回的ERP编码反定(测试账套和正式账套都尝试成功) ## 3. 供应商分类标准[行业]的明细导入,并且设置新增分类默认是按照[行业]分类 ## 4. 供应商档案覆盖和增量导入,整理Excel档: 1. 原稿中把供应商分类搞成[可供应商品],修正; 2. 删除非法数据行第452行; 3. 统一社会信用代码非空,有空的就用ERP供应商编码补充; 4. 联系人[启用]非法值修正; 5. 清除邮箱和供应商分类中的空格 ## 5. 修正存量的供应商中: 统一社会信用代码非空,有空的就用ERP供应商编码补充 ## 6. 同步ERP的供应主数据时必填银行信息 ## 7. 批量提交[正式]状态的供应商: l = frappe.db.get_list('SRM Supplier', filters={'managestatus': ['=', '正式'], 'docstatus': 0}) for i in l: doc = frappe.get_doc('SRM Supplier', i.name) doc.submit() frappe.db.commit() ## 1. 在[样品打样申请]中,增加过滤范围: 'filters': { managestatus: ['in', ['正式', '二级', '三级']] } --->一级,二级,三级(正式),四级 l = frappe.db.get_list('SRM Supplier', filters={'managestatus': ['=', '正式']}) for i in l: ...: frappe.db.set_value('SRM Supplier', i.name, 'managestatus', '三级') ...: frappe.db.commit() 检索JS代码中的'正式'替换为'三级'并且增加'四级' ## 2. [三级]管理定义: 1. 应用场景;2.级别转换关系;3. 二级转换三级需要审批流; 4. 三级转四级需要审批流 ## 3. 推送ERP[供应商主数据]的操作流程: 3.1 协同系统稽核数据合法性,只有满足条件才允许推送ERP并且邮件通知审批人; 3.2 推送ERP只是[创建]状态,必须经过财务在ERP审核才可正常使用; 3.3 如果财务审核过程中有异议则反馈给采购同事,由采购同事在协同系统中删除ERP的不合法记录(未审核允许删除); 3.4 在协同系统中修正档案资料重新推送ERP。 ## 4. 推行计划: 1. 整体培训; 2. 上线节拍(2.1 供应商档案(初始化数据补充2.13号完成); 2.2 供应商对账; 2.3 采购交期回复; 2.4 询报价) ## 5. 更换登录端口 ## 6. 增加了“删除ERP的不合法记录”的JS及PY代码,在测试账套调试OK正式账套未实测 ## 1. 供应商转换审批(只能通过审批流L2L3来[提交];L2L3提交后自动提交[SRM Supplier]):通过2个python脚本实现 ## 2. 对账单打印格式(未完成) ## 3. 比价单优化及验证(未完成) ## 4. [试产单]申请部门产品研究院改为研发中心:"FApplicationDeptId": { "FNumber": "YJ.09" }, ## 5. [打样申请]发给供应商的邮件中就要显出“送样时请按要求提供规格书及测试数据字样”: 5.1. 在PY的before中增加赋值SendEmail时携带上email_note; 5.2. SendEmail时携带上email_note ## 6. 导入新增加的10家供应商(从ERP整理了导入) ## 1. 批量提交[三级]&&[转ERP]状态的供应商: l = frappe.db.get_list('SRM Supplier', filters={'managestatus': '三级', 'to_formal': 1, 'docstatus': 0}) for i in l: doc = frappe.get_doc('SRM Supplier', i.name) doc.submit() frappe.db.commit() ## 2. 对账单打印格式(完成) ## 3. 整体培训 ## 4. 更换端口为8070 ## 1. 更改user.py原则: send_welcome_mail_to_user , send_login_mail, reset_password方面中的8070端口 ## 1. 完善供应商交期回复: srm_supply_plan_of_supplier.js 中定义弹窗中的表字段(很有参考价值) ## 2. 重要教训: 因为修改user.py时语法错误(多了一个,号)造成系统崩溃 ## 3. 同步ERP供应商调整为正式账套ID ## 4. 对接刘露做供应商操作手册--基本稿 ## 5. 分配供应商用户的代码要复盘: 5.1 invite_supplier_user时默认只给SRM Supplier角色组; 5.2 取消"绑定默认值SRM User Default" ## 6. 供应商Doctype要调整 6.1:附件上传统筹为表体行; 6.2:暂时放开[SRM Supplier]角色组有[提交]权限以配合完善存量供应商; 6.3:增加supplier.py中的append方法以供js调用 ## 7. 美化Login窗口: Logo文件必须是公共文档 ## 1. 关于送货单与采购、业务支撑开会讨论 ## 2. 把供应商档案的"制程商"批量改为"制造商" l = frappe.db.get_list('SRM Supplier', filters={'company_nature': '制程商'}) for i in l: frappe.db.set_value('SRM Supplier', i.name, 'company_nature', '制造商') ## 3. 供应商档案在SRM Supplier角色组时,隐藏[系统信息]段:frm.toggle_display(['system_information_section'], !frappe.user_roles.includes('SRM Supplier')); ## 4. 交期回复答交的优化: 1. 把保存前控制改为每行答交确认前检查; 2. 改用frappe.db.set_value和frm.reload_doc() ## 5. [默认答交]时的优化: 1. frm.dirty(); 2. frm.save(); ## 1. 交期回复答交的优化: JS调用简化,Py优化sync_to_erp_answerdetail ## 1. 报价单与询价单-供应方的闭环 def after_insert(self): frappe.db.set_value("SRM Inquiry Of Supplier", self.from_inquiry_of_supplier, "status", "已报价") def after_delete(self): frappe.db.set_value("SRM Inquiry Of Supplier", self.from_inquiry_of_supplier, "status", "待处理") ## 2. 报价单生成ERP调价单 ## 1. make_purchase_delivery优化: "doc_closed": ["=", 'A'],"condition": lambda doc: doc.closed == 'B', ## 2. 2.1. [打样申请]单已经调整为【判定】后自动发送邮件;2.2. 之前的手动功能继续保留(可能还需要手动重新发送) ## 3. 临时取消: 只有管理员角色允许在提交后修改子表内容 ## 4. 从交期回复中生成送货单: make_purchase_delivery_from_plan ## 5. 增加了每天的订单同步:day_sync_po_from_erp ## 1. 附件上传丢失attached_to_name的修复: files = frappe.db.get_list('File', filters={'attached_to_doctype': 'SRM Sample Admit', 'attached_to_name': 'new-srm-sample-admit-1'},fields=['name', 'attached_to_doctype', 'attached_to_field', 'file_url']) for i in files: aa = frappe.db.get_list(i.attached_to_doctype, filters={ i.attached_to_field : i.file_url}) if aa: frappe.db.set_value('File', i.name, 'attached_to_name', aa[0].name) frappe.db.commit() ## 2. 对1问题的修复: file_get_attached_to_name_daily,python脚本后台任务。 ## 3. 供应商档案优化: 3.1 环保资料子表添加; 3.2 基本信息的内容补充; 3.3 类似付款条件这些基础资料项与ERP保持一致 ## 4. 优化: sync_to_k3cloud_supplier,测试账套验证有效(只差注册日期字段) ## 5. [SRM Supplier]角色给与单据【侧边栏】权限,否则没有【打印】 ## 1. 公司成立时间; ## 2. 【发票类型】和【默认税率】配置为默认值,在新增供应商时会自动默认,但存量的供应商(初始化导入的)需要手动选择一次,因为初始化导入时是空值; ## 3. 增加【环保宣告表】; ## 4. 自动匹配【失效日期必须】 ## 1. 完善fixtures内容 ## 2. 明确银行必录信息并且调整同步ERP的接口字段 ## 1. 优化: 文件名不允许包含空格,python脚本FileNameValidate ## 1. [供应商]档案优化: 隐藏左侧栏的"添加文件"按钮 ## 1. 报价单的[自主报价]优化: 手动录入物料编码,JS自动携带物料名称、规格、UOM ## 1. 同一个邮箱要匹配多个供应商主数据:add_custom_button(__('Assign Supplier') ## 2. 收不到初始邮件无法登录搞默认密码:add_custom_button(__('Set Default Password') ## 3. 送货单上拉优化: 3.1 筛选功能实现; 3.2 选中后携带信息实现JS ## 1. 从ERP同步交期回复优化sync_plan_of_supplier_from_erp: 取消交期回复-采购员,直接生成交期回复-供应商 ## 2. 从ERP同步交期回复优化: 创建后根据python脚本补充邮件接收人email并且启动邮件通知和系统通知 ## 3. 行记录底色显示:frm.fields_dict["orderitem"].$wrapper.find('.grid-body .rows').find(".grid-row").each(function(i, item) { let d = locals["SRM Supply Plan Of Supplier OrderItem"][$(item).attr('data-name')]; console.log(d); let color = d["is_default"] == 0? 'yellow':'transparent'; $(item).find('.grid-static-col').css({'background-color': color}); }); ## 4. 送货单完善: ### 4.1 交期回复和采购订单只能二选一: source_billtype只能是SRM Supply Plan Of Supplier ### 4.2 已经选取未保存的行记录要在第二次选择时排除掉:// 一个forEach搭配一个filter达到去掉已选记录 ## 1. 供应商主数据优化: 增加python脚本,如果有ERP编码,则保存时自动重命名为ERP编码 ## 2. 同步交期回复表优化: 增加python脚本,导入最新版本交期回复表时,把旧的最新版去掉 ## 3. 问题记录: 写入ERP供应商主数据时报错"ERP同步失败!请联系系统管理员" ### 3.1 银行地址太长ERP写入失败 ### 3.2 提示"九联调整组织+名称唯一",是因为重复写入时报错,遗留问题"第一次写入成功但没有返回ERP编码",频繁出现了N次 ## 4. 公共文件(模版文件下载) ## 5. [打样申请单]优化 ### 5.1 根据"样品承认"是与否决定"email_note}"的内容,用客户端脚本实现,并且携带到发邮件中 ### 5.2 确认邮件发送时的"联系人"名字是有效的: 在send_supplier_emails的purchaser增加if判断更保险,确保可以有值 ## 6. 写入ERP的acctid根据[SRM Demo AcctID]是否启用来控制,不需要修改py代码造成重新启动 ## 1. 修复写入ERP的acctid根据[SRM Demo AcctID]是否启用来控制: 加ignore_permissions=True以及实际调试通过 ## 2. post_data = { "FormID": "BD_Supplier", "Data": json.dumps(post_options) }因为日期字段提示错误修复: get_date_str(doc.company_start_time) ## 3. 同步生成的[交期回复表]默认以物料代码、需求日期排序 ## 4. 公共文档上传: 供应商操作手册 ## 1. 采购订单每天同步修正: 税率和含税金额错位 ## 2. 上拉采购订单生成送货单时是否要根据ERP相关的关联字段控制送货单实发数量? ## 3. python脚本: 处理未发送邮件_hourly ## 1. [打样申请单]暂时关闭[上传文件]按钮, 只允许在指定附件字段上传单文件 ## 2. 限制性别选择时只能选取中文 ## 3. footer_powered.html修改: Built on Frappe ## 4. 补录了GY00747供应商, 从一级、二级转三级的流程: 审批生效时自动更改供应商的状态为"三级",提交 ## 5. 失效日期不足30天预警管理: 增加SRM Log Infomation记录并且通过py脚本增加revmail, 再增加邮件通知 ## 1. 如何给所有用户设置默认界面为全宽: https://gitee.com/yuzelin/erpnext-chinese-docs/issues/I5XZF1 ## 2. 汇总答交: 根据物料编码和交期相同汇总在弹窗中再确认是否答交 ## 3. List查询时默认查询条件: ['is_last', '=', 1] ## 4. 送货单中增加: 备品数量 ## 5. 打印格式: 待确认 ## 1. sync_to_erp_answerdetail优化: 判断传参是否有效 ## 2. 子表(Table)允许下载\上传控制: 2.1 子表链接字段控制允许批量修改; 2.2 $(".grid-upload").hide(); // 隐藏子表中的"上传"按钮; 2.3 推广至[送货单]、[采购订单] 、[采购订单变更] ## 3. 默认隐藏侧边栏控制: hide_toolbar ## 4. 修复采购订单的税率和金额字段: ### 4.1 优化sync_po_onebyone,增加[税额]; ### 4.2 orders = frappe.db.get_list('SRM Purchase Order') for i in orders: order = frappe.get_doc('SRM Purchase Order', i.name) order.get_po_from_erp() ### 4.3 "UM01-CGDD230200771"与"UM01-CGDD230200583"这两个单号从ERP重新同步无效,待查原因(ERP删除了?) ## 5. [交期回复表]提供导出Excel但不允许导入 ### 5.1 setup_download()中修改源码: console.log(df);data[1].push(__(df.label)); ## 6. List界面切换边栏: 1. Ctrl+K进行切换; 2. 系统自动记忆该选项(隐藏或者不隐藏); 3. 貌似只对当前浏览器生效,切换浏览器后不一致; ## 7. 结构件的三个单[开模申请单]的List调整优化: 隐藏Status,放开"协同审批" ## 1. 子表(Table)允许下载\上传控制: 允许批量修改 + $(".grid-upload").hide(); + (frappe.model.is_value_type(df.fieldtype) && df.no_copy == 0 && df.print_hide == 0) ## 2. SRM Issue ## 1. 采购订单同步及List、Form完善: ### 1.1 修正同步付款条件;FPayConditionId.FName ### 1.2 单据上的总数量及总金额: JS和PY脚本都有尝试暂时用PY脚本 ### 1.3 关闭状态优化: A 是"已关闭", B是"未关闭" ### 1.4 采购订单的打印(PDF格式): 有了V1.0版本 ## 2. 采购订单变更同步及List、Form完善: ### 2.1 变更类型: A 是"新增", B是"修改", C是"删除", D是"终止" ## 3. 子表[下载]出现乱码: https://gitee.com/yuzelin/erpnext-chinese-docs/issues/I3UIS2 ## 4. 非常重要之采购交期回复表同步缺少了数据行: # F_JLKJ_SubEntity_FDetailID采购需求分配的实体主键, 纠正之前的F_JLKJ_Entity_FEntryID ## 1. 同步采购交期回复表时出现超时: 1.1 bench set-config scheduler_interval 600; 1.2 到site_config.json中修改"600"为600, 否则出现错误"unsupported operand type(s) for //: 'str' and 'int'" ## 2. 交期回复表优化: 2.1 历史版本没有[默认回复]功能; 2.2 历史版本进行[答交]时会有提示不允许[答交] ## 3. 采购订单优化: 取消[默认回复]功能,只对管理员开放 ## 4. [询价单]优化: 表头及子表优化完成 ## 5. [报价单]优化: 取消"material_number"的链接只是"数据"类型 ### 5.1 "主动报价"类型优化: "material_number"代码携带物料名称、规格等属性; ### 5.2 下推生成[报价单]优化: "material_number"只读; 暂时先取消从询价单---询价单(供方)设置LT、MOQ必填控制; ## 1. 增加2个采购交期回复的试运行供应商: 要验证是否能收到邮件提醒 ## 2. 验证同步采购交期回复表是否还会有超期错误 ## 3. 发货单实发数量不允许为0: 在JS中增加代码:frappe.throw(`第 ${row.idx} 行的实发数量小于等于0, 不能保存!`); ## 4. 同步超时设置为1200秒 ## 5. 报价单不允许报价为0 ## 6. 因为粗心造成采购订单的状态更新有误,返工: orders = frappe.db.get_list('SRM Purchase Order') for i in orders: order = frappe.get_doc('SRM Purchase Order', i.name) order.get_po_from_erp() ## 7. OK优化送货单选择[采购交期回复]时窗口中携带"交期字段"便于筛选: SQL查询要排序;JS中增加字段; ## 8. OK送货单子表优化: 隐藏跟价格相关的字段 ## 9. OK重新调试[询价单]提交时自动生成[询价单-供方]: ## 10. [询价单]生成[比价单]优化提示窗口:rappe.msgprint(`已经有比价单记录,点击链接查看:比价单`) ## 11. 在[询价单]中生成[比价单]初步调试完成:没有报错没有缺漏; PY脚本"比价单反写报价单标识"; ## 12. 在登录窗口可以弹窗温馨提示,在网站主题中增加自定义JS: frappe.show_alert({indicator: 'green', message: (`1. 建议用最新版本谷歌浏览器、火狐浏览器、Microsoft Edge
2. 请安装Excel2010(含2010)以上版本或最新WPS
`)}, 10) ## 13. 附件上传控制不允许是zip, rar格式: // 简单判断上传文件是否为压缩包格式 ## 1. 供应商档案有效期预警调整为每月一次 ## 2. 比价单生成ERP调价单记录:修改了Py代码待调试确认,代码调试完成需要注意: ERP必须先有价目表(已审核有效的价目表,九联默认以供应商编码作为价目表编码) ## 3. 自主报价优化: 1> 旧单价及新单价; 2>生成ERP调价单记录 ## 4. [对账单]中取消字段"supplier_number"对[供应商]角色的隐藏 ## 5. [样品申请单]未保存时的附件上传造成丢失: 增加py脚本[打样申请未保存附件上传sample_file]以及[样品承认未保存附件上传];今晚再把现存的没有attached_to_name的更新一次: [样品承认单]附件上传丢失attached_to_name的修复: files = frappe.db.get_list('File', filters={'attached_to_doctype': 'SRM Sample Admit', 'attached_to_name': ['like', '%new-srm-sample-%']},fields=['name', 'attached_to_doctype', 'attached_to_field', 'file_url']) for i in files: aa = frappe.db.get_list(i.attached_to_doctype, filters={ i.attached_to_field : i.file_url}) if aa: frappe.db.set_value('File', i.name, 'attached_to_name', aa[0].name) frappe.db.commit() [样品承认单]附件上传丢失attached_to_name的修复:有1269条记录,暂时不处理 ## 6. 新需求: 下载子表明细行时,把[行次]一起下载 ## 7. [对账单优化]: 1> 增加子表"SRM Reconciliation Invoice Items"; 2> PY脚本"对账单发票附件自动添加标签"实现附件自动添加供应商名称作为标签便于事后检索 ## 1. 写入云星空供应商时联系人问题: 调试成功; 考虑到供应商重命名增加一个Py脚本"Supplier Rename After Submit" ## 2. [交期回复表]创建后发邮件问题: 在Py脚本'交期回复-供应商-邮件接收人"中增加frappe.sendmail代码可以排入队列可收到邮件。 ## 1. [送货单]的最小包装控制: 1> 在[送货单]中增加"MPQ"并且从[交期回复表]中携带; 2> before_save中增加对MPQ的控制 ## 1. 定义的方法名不能与字段名相同!定义的方法名不能与字段名相同!定义的方法名不能与字段名相同! ## 2. 供应商用户确认是否接收订单;py脚本超过36小时自动确认; ## 3. 在虚拟机中部署测试环境: DB密码123, navicate备份及恢复。 ## 1. sync_plan_of_supplier_from_erp优化: 同步时长控制在分钟级(6K条记录行) ## 2. [供应商导入审批单]在PC端的完善: 1. Doctype定义; 2. 下推时所有只读字段的复制携带; 3. 附件链接的细节处理; 4. 审批流包括审批后的set_value很有借鉴意义; 5. 功能测试验证还差测试报告. ## 1. [打样申请单]与[样品承认单]: 1.1 下推生成[样品承认单]; 1.2 [样品承认单]在[送测审核]时更新[样品申请单]的“实际送样数量"及"实际送样日期" ## 2. [供应商导入审批单]完善及测试报告 ## 3. [对账]完善及测试报告: 详细见于测试报告 ## 1. 询报价完善及测试报告: ## 2. [打样申请单]下推生成[样品承认单]优化 ## 3. 四月一号批量使用前优化: ### 3.1 送货单打印格式: a. 可导出后自由调整格式; ### 3.2 采购订单打印格式: a. FCreatorId.FName匹配SRM的采购员; b. 把历史的FCreatorId.FName刷一次; c. 调试与ERP打印格式基本相符 ### 3.3 采购订单供应商拒绝理由填写: 定义depends_on和mandatory_depends_on属性 ### 3.4 暂时关闭[交期回复表]的[提交]功能: 定制的PY脚本"暂时关闭交期回复表提交功能" ## 1. 限制供应商角色修改采购员的送货单 ## 2. 完善询报价单 ## 1. 切换发邮件的邮箱账户为umsrm@unionman.com.cn, 验证成功 ## 2. 修改同步ERP采购订单的条件(暂时只同步UM01这个组织的订单): AND FPurchaseOrgId.FNumber = 'UM01' ## 3. 恢复了SRM Param,单表 ## 4. 优化采购订单同步: sync_po_onebyone中增加字段2023-04-04增加: 币别-13, 审核人-14; 并且把历史订单全部同步一次; ## 5. 优化采购订单变更单同步:增加字段制单人, 审核人 ## 6. 同步创建了采购订单变更单,要自动触发采购订单的onebyone同步(数量/单价/交期/行状态/单据状态) ## 7. 分配供应商用户修复Bug: 不写联系人行记录的Have User标识 ## 8. 通过API修改ERP物料主数据的MPQ: 1)调试好后台方法;2)如果修改不成功也写入日志Error Log以便于查询 ## 1. 批量检验并更新联系人的邮箱for i in e: ...: doc = frappe.get_doc('SRM Supplier ContactBackgroud Sub', i.name) ...: if doc.email_address: ...: frappe.db.set_value(doc.doctype, doc.name, {'email_address': validate_email_address(doc.email_address)}) ## 2. 备份与恢复问题:bench backup -e "Deleted Document" ## 3. 供应商档案中增加了检验联系人邮箱的py和js代码 ## 1. 送货单和采购订单的打印格式优化 ## 2. 修复因为送货单数量偏差问题: def sync_relation_qty(self) ## 3. 重新同步物料主数据: 同步规格型号,def day_sync_material_from_erp() ## 1. 因为采购变更单所以把1月份的采购订单也同步过来了(根据修改日期有同步):是否可优化? ## 2. 增加[临时修改MPQ]功能 ## 3. 上拉[交期回复表]开[送货单]时调整为: 只扣减delivery_qty, 不计算relation_qty ## 1. 配套"样品承认单的最小包装要同步至ERP",在[样品承认单]中限制mpq的录入规则, LT的整数属性 ## 1. 采购订单同步优化: 2023-04-10: 修订为self.save()以触发ORM, 否则会出现"未关闭"但doc_closed=='B' ## 1. [采购订单]启用采购员权限隔离 ## 2. 优化[交期回复表]从ERP的同步条件: AND FBillneedDate <= '{add_to_date(today(), days = 14)}' ## 3. Login界面优化: website-theme/Standard, 自定义JS ## 3.1 $(".page-card-head")[0].children[1].innerHTML = "供应商协同"; ## 3.2 $(".email-field")[0].firstElementChild.placeholder = "用户名"; ## 3.3 $(".password-field")[0].firstElementChild.placeholder = "密码" ; ## 1. 采购订单同步只同步FDate >='2023-03-01' ## 2. 采购订单明细表增加同步字段并配置同步对照表&&增加sync_po_onebyone中的字段对应 业务冻结,业务终止,等等 ## 3. 36小时自动接收未生效 ## 1. 修正采购调价表的写入调用: "人民币" if currency == "CNY" else "美元", srm_quotation取消保存前tax_rate不能为0的校验 ## 2. 采购变更同步后触发采购订单即时同步ERP一次 ## 1. 最新同步的采购订单"关闭状态"为空修复 ## 1. ROHS编码库及[样品承认]的发布及完善 ## 2. 供应商反馈[送货单]已经提交但确实要修改部分行: frappe.db.set_value('SRM Purchase Delivery Sub', '581018b8d1', 'real_qty', 12000), 同时在交期回复表中[修复关联数量] ## 3. 优化每日更新采购订单的执行 ## 1. anyone can save as 2023-04-20: 注释掉再bench build ## 1. 因为ERP修改了"物料描述"造成两套系统的采购订单的"规格型号"不一致: 在采购订单中有[同步]功能可手动修复 ## 2. 增加new_day_sync_material_from_erp,每天03:36从ERP同步物料同步一次以确保规格型号,物料名称可保持一致性 ## 1. 生成对账明细增加是否关账检测OK ## 2. 报价单为主动报价时,物料来源于货源清单 ## 1. 货源清单一次同步 ## 2. 报价单到期预警 ## 3. 与九联门户的API对接调试 ## 1. [基础供应商导入确认]发布 ## 1. 与九联门户的API对接调试: 富文本 ## 1. last_sync_time_str = syncConfig.last_sync_time.strftime('%Y-%m-%d %H:%M:%S')修改为了last_sync_time_str = syncConfig.last_sync_time.strftime('%Y-%m-%d 00:00:00') ## 1. 与九联门户的API对接调试: 撤回可以删除OA记录但没有任何返回,暂不处理 ## 2. 价格到期预警数据: 结合黑名单的应用 ## 3. 报价单采纳后显示为1修订: ## 1. 优化[品质确认]的PY代码,以避免权限不足的提示 ## 1. 调试[供应商导入审批单]于[采购总监]审核后8分钟后自动同步至OA门户 ## 1. 供应商档案: 调整了供应商导入审批单打印格式(增加单号,修改为付款条件); 翻译从支付方式修改为付款条件; 财务资料发票类型增加"INVOICE"选项; 增加付款条件6项 ## 1. 自主报价类型优化: 生成ERP采购调价表sync_to_k3cloud_price_adjustment_more_entrys ## 1. 自主报价类型优化: 录入物料编码时先从货源清单(来源于云星空的同步)是否匹配, 再从SRM Material 携带物料名称及规格型号 ## 2. 增加[调前单价]逻辑 ## 1. 报价单推送到云星空后要区分采购员(当前是全部用demo2) ## 2. 把采购部的用户名都从云星空同步了一次userid ## 1. 修改源码并且编译JS文件:在clear_attachment()之前增加一个提示frappe.warn(__('Are you sure you want to Clear Attachment?'), # 2023-12-02优化: 每天06:36把180天前的邮件队列删除100条记录, 通告邮件优化每个小时发送50封邮件 ## "srm.srm.doctype.srm_server_config.srm_server_config.auto_delete_email_queue" # 对账单优化: 增加FEntryTaxRate, FEntryTaxAmount, FPrice, FAmount