/// <summary> /// 服务编辑 /// </summary> /// <param name="ser"></param> /// <param name="userId"></param> /// <returns></returns> public bool EditService(ivt_service ser, long userId) { ivt_service_dal dal = new ivt_service_dal(); ivt_service service = dal.FindById(ser.id); ivt_service serOld = dal.FindById(ser.id); service.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); service.update_user_id = userId; service.name = ser.name; service.description = ser.description; service.invoice_description = ser.invoice_description; service.sla_id = ser.sla_id; service.vendor_account_id = ser.vendor_account_id; service.period_type_id = ser.period_type_id; service.unit_cost = ser.unit_cost; service.unit_price = ser.unit_price; service.cost_code_id = ser.cost_code_id; service.is_active = ser.is_active; var desc = OperLogBLL.CompareValue <ivt_service>(serOld, service); if (!string.IsNullOrEmpty(desc)) { dal.Update(service); OperLogBLL.OperLogUpdate(desc, service.id, userId, DTO.DicEnum.OPER_LOG_OBJ_CATE.IVT_SERVICE, "编辑服务"); } return(true); }
/// <summary> /// 设置邮件模板默认 /// </summary> /// <param name="id"></param> /// <param name="type"></param> /// <param name="userId"></param> /// <returns></returns> public bool SetDefault(long id, int type, long userId) { var tmpl = dal.FindNoDeleteById(id); if (tmpl == null || tmpl.is_system_default == 1) { return(false); } sys_quote_email_tmpl old; var dft = dal.FindSignleBySql <sys_quote_email_tmpl>($"select * from sys_quote_email_tmpl where is_system_default=1 and cate_id={type}"); if (dft != null) { old = dal.FindById(dft.id); dft.is_system_default = 0; dft.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); dft.update_user_id = userId; dal.Update(dft); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sys_quote_email_tmpl>(old, dft), dft.id, userId, DicEnum.OPER_LOG_OBJ_CATE.QUOTE_TEMP, "取消邮件模板默认"); } old = dal.FindById(tmpl.id); tmpl.is_system_default = 1; tmpl.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); tmpl.update_user_id = userId; dal.Update(tmpl); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sys_quote_email_tmpl>(old, tmpl), tmpl.id, userId, DicEnum.OPER_LOG_OBJ_CATE.QUOTE_TEMP, "设置邮件模板默认"); return(true); }
/// <summary> /// 编辑工作流规则 /// </summary> /// <param name="workflow"></param> /// <param name="userId"></param> /// <returns></returns> public bool EditWorkflow(sys_workflow workflow, long userId) { sys_workflow wf = dal.FindById(workflow.id); sys_workflow wfOld = dal.FindById(workflow.id); if (wf.workflow_object_id != workflow.workflow_object_id) // 编辑不能修改对象类型 { return(false); } wf.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); wf.update_user_id = userId; wf.name = workflow.name; wf.description = workflow.description; wf.is_active = workflow.is_active; wf.use_default_tmpl = workflow.use_default_tmpl; wf.notify_tmpl_id = workflow.notify_tmpl_id; wf.notify_subject = workflow.notify_subject; wf.event_json = workflow.event_json; wf.condition_json = workflow.condition_json; wf.update_json = workflow.update_json; string desc = OperLogBLL.CompareValue <sys_workflow>(wfOld, wf); if (!string.IsNullOrEmpty(desc)) { dal.Update(wf); OperLogBLL.OperLogUpdate(desc, wf.id, userId, DicEnum.OPER_LOG_OBJ_CATE.WORKFLOW_RULE, "编辑工作流规则"); } return(true); }
/// <summary> /// 取消提交工时表 /// </summary> /// <param name="startDate"></param> /// <param name="resourceId"></param> /// <param name="userId"></param> /// <returns></returns> public bool CancleSubmitWorkEntry(DateTime startDate, long resourceId, long userId) { var weList = GetWorkEntryListByStartDate(startDate, resourceId); if (weList.Count == 0) { return(false); } sdk_work_entry_report_dal rptDal = new sdk_work_entry_report_dal(); var find = rptDal.FindSignleBySql <sdk_work_entry_report>($"select * from sdk_work_entry_report where resource_id={resourceId} and start_date='{startDate}' and delete_time=0"); if (find == null || find.status_id != (int)DicEnum.WORK_ENTRY_REPORT_STATUS.WAITING_FOR_APPROVAL) { return(false); } sdk_work_entry_report reportOld = rptDal.FindById(find.id); find.status_id = (int)DicEnum.WORK_ENTRY_REPORT_STATUS.HAVE_IN_HAND; find.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); find.update_user_id = userId; find.submit_time = find.update_time; find.submit_user_id = userId; rptDal.Update(find); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sdk_work_entry_report>(reportOld, find), find.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_RECORD, "工时表取消提交"); return(true); }
/// <summary> /// 工时表提交 /// </summary> /// <param name="startDate"></param> /// <param name="resourceId"></param> /// <param name="userId"></param> /// <returns></returns> public bool SubmitWorkEntry(DateTime startDate, long resourceId, long userId) { var weList = GetWorkEntryListByStartDate(startDate, resourceId); //if (weList.Count == 0) // return false; sdk_work_entry_report report = new sdk_work_entry_report(); sdk_work_entry_report_dal rptDal = new sdk_work_entry_report_dal(); var find = rptDal.FindSignleBySql <sdk_work_entry_report>($"select * from sdk_work_entry_report where resource_id={resourceId} and start_date='{startDate}' and delete_time=0"); if (find != null && find.status_id != (int)DicEnum.WORK_ENTRY_REPORT_STATUS.HAVE_IN_HAND && find.status_id != (int)DicEnum.WORK_ENTRY_REPORT_STATUS.REJECTED) { return(false); } if (find == null) { report.id = rptDal.GetNextIdCom(); report.create_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); report.update_time = report.create_time; report.create_user_id = userId; report.update_user_id = userId; report.resource_id = resourceId; report.start_date = startDate; report.end_date = startDate.AddDays(6); report.status_id = (int)DicEnum.WORK_ENTRY_REPORT_STATUS.WAITING_FOR_APPROVAL; report.submit_time = report.create_time; report.submit_user_id = userId; rptDal.Insert(report); OperLogBLL.OperLogAdd <sdk_work_entry_report>(report, report.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_RECORD, "工时表提交"); foreach (var we in weList) { var weOld = dal.FindById(we.id); we.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); we.update_user_id = userId; we.work_entry_report_id = report.id; dal.Update(we); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sdk_work_entry>(weOld, we), we.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_ENTRY, "工时表提交"); } } else { sdk_work_entry_report reportOld = rptDal.FindById(find.id); find.status_id = (int)DicEnum.WORK_ENTRY_REPORT_STATUS.WAITING_FOR_APPROVAL; find.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); find.update_user_id = userId; find.submit_time = find.update_time; find.submit_user_id = userId; rptDal.Update(find); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sdk_work_entry_report>(reportOld, find), find.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_RECORD, "工时表提交"); } return(true); }
/// <summary> /// 工时表审批 /// </summary> /// <param name="ids">,号分割的多个工时表id</param> /// <param name="userId"></param> /// <returns></returns> public int ApproveWorkEntryReport(string ids, long userId) { int appCnt = 0; var rptDal = new sdk_work_entry_report_dal(); var logDal = new tst_work_entry_report_log_dal(); var reports = rptDal.FindListBySql($"select * from sdk_work_entry_report where id in({ids}) and status_id={(int)DicEnum.WORK_ENTRY_REPORT_STATUS.WAITING_FOR_APPROVAL} and delete_time=0"); if (reports == null || reports.Count == 0) { return(appCnt); } var user = new UserResourceBLL().GetResourceById(userId); foreach (var report in reports) { // 判断用户是否在当前可以审批工时表 int tier = GetWorkEntryReportCurrentApproveTier(report.id); if (tier == 3) { continue; } var aprvResList = GetApproverList((long)report.resource_id); tier++; if (user.security_level_id == 1 || aprvResList.Exists(_ => _.tier == tier && _.approver_resource_id == userId)) // 用户是管理员或用户可以审批下一级 { tst_work_entry_report_log log = new tst_work_entry_report_log(); log.id = logDal.GetNextIdCom(); log.work_entry_report_id = report.id; log.oper_user_id = userId; log.oper_type_id = (int)DicEnum.WORK_ENTRY_REPORT_OPER_TYPE.APPROVAL; log.oper_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); log.tier = tier; logDal.Insert(log); OperLogBLL.OperLogAdd <tst_work_entry_report_log>(log, log.id, userId, DicEnum.OPER_LOG_OBJ_CATE.WORK_ENTRY_REPORT_LOG, "工时表审批"); appCnt++; if (aprvResList.Count == 0 || aprvResList.Max(_ => _.tier) == tier) // 是最后一级审批人 { var rptOld = rptDal.FindById(report.id); report.status_id = (int)DicEnum.WORK_ENTRY_REPORT_STATUS.PAYMENT_BEEN_APPROVED; report.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); report.update_user_id = userId; report.approve_time = report.update_time; report.approve_user_id = userId; rptDal.Update(report); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sdk_work_entry_report>(rptOld, report), report.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_RECORD, "工时表审批"); } } } return(appCnt); }
/// <summary> /// 编辑库存产品 /// </summary> /// <param name="pdt"></param> /// <param name="sn"></param> /// <param name="userId"></param> /// <returns></returns> public bool EditIvtProduct(ivt_warehouse_product pdt, string sn, long userId) { ivt_warehouse_product product = dal.FindById(pdt.id); ivt_warehouse_product productOld = dal.FindById(pdt.id); if (product == null) { return(false); } product.reference_number = pdt.reference_number; product.bin = pdt.bin; product.quantity_minimum = pdt.quantity_minimum; product.quantity_maximum = pdt.quantity_maximum; product.quantity = pdt.quantity; product.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); product.update_user_id = userId; string desc = OperLogBLL.CompareValue <ivt_warehouse_product>(productOld, product); if (!string.IsNullOrEmpty(desc)) { dal.Update(product); OperLogBLL.OperLogUpdate(desc, product.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "修改库存产品"); } if (product.quantity != productOld.quantity) // 修改库存数量记录库存转移 { var transferDal = new ivt_transfer_dal(); var trsf = new ivt_transfer(); trsf.id = dal.GetNextIdCom(); trsf.create_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); trsf.create_user_id = userId; trsf.update_time = trsf.create_time; trsf.update_user_id = userId; trsf.quantity = product.quantity - productOld.quantity; trsf.type_id = (int)DicEnum.INVENTORY_TRANSFER_TYPE.MANUAL; trsf.product_id = product.product_id; trsf.from_warehouse_id = (long)product.warehouse_id; trsf.notes = ""; transferDal.Insert(trsf); OperLogBLL.OperLogAdd <ivt_transfer>(trsf, trsf.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER, "新增库存转移"); } //OperLogBLL.OperLogUpdate<ivt_warehouse_product>(product, productOld, product.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "修改库存产品"); string sql = $"update ivt_warehouse_product_sn set delete_user_id={userId},delete_time={Tools.Date.DateHelper.ToUniversalTimeStamp()} where warehouse_product_id={product.id}"; dal.ExecuteSQL(sql); SaveProductSn(sn, product.id, userId); return(true); }
/// <summary> /// 停用工作流规则 /// </summary> /// <param name="id"></param> /// <param name="userId"></param> /// <returns></returns> public bool SetWorkflowInactive(long id, long userId) { sys_workflow wf = dal.FindById(id); if (wf.is_active == 0) { return(true); } sys_workflow wfOld = dal.FindById(id); wf.is_active = 0; wf.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); wf.update_user_id = userId; dal.Update(wf); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sys_workflow>(wfOld, wf), id, userId, DicEnum.OPER_LOG_OBJ_CATE.WORKFLOW_RULE, "停用工作流规则"); return(true); }
/// <summary> /// 更新员工信息 /// </summary> /// <param name="data"></param> /// <param name="userId"></param> /// <param name="resourceId"></param> /// <returns></returns> public ERROR_CODE Update(SysUserAddDto data, long userId, long resourceId) { // 检查邮箱和手机号是否重复 sys_resource findRes; if (string.IsNullOrEmpty(data.sys_res.mobile_phone)) { findRes = _dal.FindSignleBySql <sys_resource>($"select * from sys_resource where email='{data.sys_res.email}' and id<>{data.sys_res.id} and delete_time=0"); } else { findRes = _dal.FindSignleBySql <sys_resource>($"select * from sys_resource where (email='{data.sys_res.email}' or mobile_phone='{data.sys_res.mobile_phone}') and id<>{data.sys_res.id} and delete_time=0"); } if (findRes != null) { return(ERROR_CODE.SYS_NAME_EXIST); } var resOld = GetResourceById(resourceId); data.sys_res.update_user_id = userId; data.sys_res.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); var desc = OperLogBLL.CompareValue <sys_resource>(resOld, data.sys_res); if (!string.IsNullOrEmpty(desc)) { _dal.Update(data.sys_res); OperLogBLL.OperLogUpdate(desc, data.sys_res.id, userId, OPER_LOG_OBJ_CATE.RESOURCE, "编辑员工"); } var userDal = new sys_user_dal(); var userOld = userDal.FindById(resourceId); if (userOld.password != data.sys_user.password) { data.sys_user.password = new Tools.Cryptographys().SHA1Encrypt(data.sys_user.password); } desc = OperLogBLL.CompareValue <sys_user>(userOld, data.sys_user); if (!string.IsNullOrEmpty(desc)) { userDal.Update(data.sys_user); OperLogBLL.OperLogUpdate(desc, data.sys_user.id, userId, OPER_LOG_OBJ_CATE.RESOURCE, "编辑员工"); } // 员工每天工作时间 var dal = new sys_resource_availability_dal(); var ava = dal.FindSignleBySql <sys_resource_availability>($"select * from sys_resource_availability where resource_id={resourceId} and delete_time=0"); if (ava == null) { data.availability.id = dal.GetNextIdCom(); data.availability.resource_id = resourceId; data.availability.create_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); data.availability.update_time = data.availability.create_time; data.availability.create_user_id = userId; data.availability.update_user_id = userId; dal.Insert(data.availability); } else { data.availability.id = ava.id; data.availability.resource_id = resourceId; data.availability.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); data.availability.update_user_id = userId; data.availability.create_time = ava.create_time; data.availability.create_user_id = ava.create_user_id; dal.Update(data.availability); } // 员工休假-额外时间 sys_resource_additional_time_dal timeDal = new sys_resource_additional_time_dal(); if (data.addTime1 != null) { var time1 = timeDal.FindSignleBySql <sys_resource_additional_time>($"select * from sys_resource_additional_time where resource_id={resourceId} and period_year={data.addTime1.period_year.Value}"); if (time1 == null) { data.addTime1.id = timeDal.GetNextIdCom(); data.addTime1.resource_id = resourceId; timeDal.Insert(data.addTime1); } else { time1.time_vacation = data.addTime1.time_vacation; time1.time_personal = data.addTime1.time_personal; time1.time_sick = data.addTime1.time_sick; time1.time_float = data.addTime1.time_float; timeDal.Update(time1); } } if (data.addTime2 != null) { var time2 = timeDal.FindSignleBySql <sys_resource_additional_time>($"select * from sys_resource_additional_time where resource_id={resourceId} and period_year={data.addTime2.period_year.Value}"); if (time2 == null) { data.addTime2.id = timeDal.GetNextIdCom(); data.addTime2.resource_id = resourceId; timeDal.Insert(data.addTime2); } else { time2.time_vacation = data.addTime2.time_vacation; time2.time_personal = data.addTime2.time_personal; time2.time_sick = data.addTime2.time_sick; time2.time_float = data.addTime2.time_float; timeDal.Update(time2); } } return(ERROR_CODE.SUCCESS); }
/// <summary> /// 编辑工时 /// </summary> /// <param name="weList">编辑后的工时列表</param> /// <param name="batchId"></param> /// <param name="userId"></param> /// <returns></returns> public bool EditWorkEntry(List <sdk_work_entry> weList, long batchId, long userId) { var bll = new TimeOffPolicyBLL(); tst_timeoff_balance_dal balDal = new tst_timeoff_balance_dal(); var weListOld = GetWorkEntryByBatchId(batchId); if (weListOld[0].approve_and_post_user_id != null) // 已审批提交不能编辑 { return(false); } foreach (var we in weListOld) { if (weList.Exists(_ => _.start_time == we.start_time)) // 原工时被编辑 { var weOld = dal.FindById(we.id); var weEdit = weList.Find(_ => _.start_time == we.start_time); we.internal_notes = weEdit.internal_notes; we.summary_notes = weEdit.summary_notes; we.hours_worked = weEdit.hours_worked; we.hours_billed = weEdit.hours_billed; we.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); we.update_user_id = userId; var desc = OperLogBLL.CompareValue <sdk_work_entry>(weOld, we); if (!string.IsNullOrEmpty(desc)) { dal.Update(we); OperLogBLL.OperLogUpdate(desc, we.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_ENTRY, "编辑工时"); if (we.task_id == (long)CostCode.Sick && we.hours_worked != weOld.hours_worked) // 病假需要在假期余额表修改记录 { bll.UpdateTimeoffBalance(we.resource_id.Value, Tools.Date.DateHelper.TimeStampToUniversalDateTime(we.start_time.Value), (CostCode)we.task_id); //var balance = bll.UpdateTimeoffBalance((long)we.resource_id, Tools.Date.DateHelper.TimeStampToDateTime((long)we.start_time), (decimal)weOld.hours_billed - (decimal)we.hours_billed); //var bal = balDal.FindSignleBySql<tst_timeoff_balance>($"select * from tst_timeoff_balance where object_id={we.id}"); //bal.balance = bal.balance + ((decimal)we.hours_billed - (decimal)weOld.hours_billed); //balDal.Update(bal); } } weList.Remove(weEdit); } else // 原工时被删除 { we.delete_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); we.delete_user_id = userId; dal.Update(we); OperLogBLL.OperLogDelete <sdk_work_entry>(we, we.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_ENTRY, "编辑工时删除"); if (we.task_id == (long)CostCode.Sick) // 病假需要在假期余额表删除记录 { bll.UpdateTimeoffBalance(we.resource_id.Value, Tools.Date.DateHelper.TimeStampToUniversalDateTime(we.start_time.Value), (CostCode)we.task_id); //var balance = bll.UpdateTimeoffBalance((long)we.resource_id, Tools.Date.DateHelper.TimeStampToDateTime((long)we.start_time), (decimal)we.hours_billed); //balDal.ExecuteSQL($"delete from tst_timeoff_balance where object_id={we.id}"); } } } foreach (var we in weList) // 剩余需要新增 { we.id = dal.GetNextIdCom(); we.batch_id = batchId; we.resource_id = weListOld[0].resource_id; we.cost_code_id = weListOld[0].cost_code_id; we.task_id = weListOld[0].task_id; we.create_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); we.update_time = we.create_time; we.create_user_id = userId; we.update_user_id = userId; dal.Insert(we); OperLogBLL.OperLogAdd <sdk_work_entry>(we, we.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SDK_WORK_ENTRY, "编辑工时新增"); if (we.task_id == (long)CostCode.Sick) // 病假需要在假期余额表添加记录 { bll.UpdateTimeoffBalance(we.resource_id.Value, Tools.Date.DateHelper.TimeStampToUniversalDateTime(we.start_time.Value), (CostCode)we.task_id); //var balance = bll.UpdateTimeoffBalance((long)we.resource_id, Tools.Date.DateHelper.TimeStampToDateTime((long)we.start_time), 0 - (decimal)we.hours_billed); //tst_timeoff_balance bal = new tst_timeoff_balance(); //bal.object_id = we.id; //bal.object_type_id = 2214; //bal.task_id = we.task_id; //bal.balance = balance + (decimal)we.hours_billed; //balDal.Insert(bal); } } return(true); }
/// <summary> /// 新增编辑自定义字段 /// </summary> /// <param name="cate"></param> /// <param name="udf"></param> /// <param name="userId"></param> /// <returns></returns> public bool EditUdf(DicEnum.UDF_CATE cate, UserDefinedFieldDto udf, long userId) { if (udf.id == 0) { return(AddUdf(cate, udf, userId)); } var dal = new sys_udf_field_dal(); var field = dal.FindNoDeleteById(udf.id); if (field == null) { return(false); } field.col_comment = udf.name; field.description = udf.description; field.data_type_id = udf.data_type; field.default_value = udf.default_value; field.is_protected = udf.is_protected; field.is_required = udf.required; field.is_encrypted = udf.is_encrypted; field.is_visible_in_portal = udf.is_visible_in_portal; field.crm_to_project_udf_id = udf.crm_to_project; field.sort_order = udf.sort_order; field.is_active = udf.is_active; field.display_format_id = udf.display_format; field.decimal_length = udf.decimal_length; field.update_user_id = userId; field.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); var fieldOld = dal.FindById(field.id); var desc = OperLogBLL.CompareValue <sys_udf_field>(fieldOld, field); if (!string.IsNullOrEmpty(desc)) { dal.Update(field); OperLogBLL.OperLogUpdate(desc, field.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED, "编辑自定义字段"); } var listDal = new sys_udf_list_dal(); var list = dal.FindListBySql <sys_udf_list>($"select * from sys_udf_list where udf_field_id={field.id} and status_id=0 and delete_time=0"); //var find=udf.list.Find(_=>_.is_default==1) foreach (var ufv in udf.list) { var find = list.Find(_ => _.id == ufv.id); if (find == null) { sys_udf_list val = new sys_udf_list(); val.id = listDal.GetNextIdCom(); val.is_default = ufv.is_default; val.name = ufv.name; val.sort_order = ufv.sort_order; val.udf_field_id = udf.id; val.status_id = 0; val.create_time = Tools.Date.DateHelper.ToUniversalTimeStamp(DateTime.Now); val.update_time = val.create_time; val.create_user_id = field.create_user_id; val.update_user_id = val.create_user_id; listDal.Insert(val); OperLogBLL.OperLogAdd <sys_udf_list>(val, val.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED_LIST, "新增自定义字段值"); } else { if (find.is_default != ufv.is_default) { find.is_default = ufv.is_default; find.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(DateTime.Now); find.update_user_id = userId; var old = listDal.FindById(find.id); listDal.Update(find); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <sys_udf_list>(old, find), find.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED_LIST, "编辑自定义字段值"); } list.Remove(find); } } foreach (var ufv in list) { ufv.delete_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); ufv.delete_user_id = userId; listDal.Update(ufv); OperLogBLL.OperLogDelete <sys_udf_list>(ufv, ufv.id, userId, DicEnum.OPER_LOG_OBJ_CATE.SYS_UDF_FILED_LIST, "删除自定义字段值"); } return(true); }
/// <summary> /// 取消配送 /// </summary> /// <param name="costPdtIds">成本产品id</param> /// <param name="userId"></param> /// <returns></returns> public string PurchaseUnShip(string costPdtIds, long userId) { ctt_contract_cost_product_dal cstPdtDal = new ctt_contract_cost_product_dal(); var pdtList = cstPdtDal.FindListBySql <ctt_contract_cost_product>($"select * from ctt_contract_cost_product where id in({costPdtIds})"); if (pdtList == null || pdtList.Count == 0) { return(""); } ctt_contract_cost_dal costDal = new ctt_contract_cost_dal(); ivt_transfer_dal tsfDal = new ivt_transfer_dal(); ctt_contract_dal cttDal = new ctt_contract_dal(); pro_project_dal proDal = new pro_project_dal(); sdk_task_dal tskDal = new sdk_task_dal(); ivt_warehouse_product_sn_dal lctPdtSnDal = new ivt_warehouse_product_sn_dal(); ivt_transfer_sn_dal tsfSnDal = new ivt_transfer_sn_dal(); foreach (var pdt in pdtList) { // 修改成本产品状态 var pdtOld = cstPdtDal.FindById(pdt.id); pdt.status_id = (int)DicEnum.CONTRACT_COST_PRODUCT_STATUS.PENDING_DISTRIBUTION; pdt.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); pdt.shipping_time = null; pdt.update_user_id = userId; cstPdtDal.Update(pdt); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ctt_contract_cost_product>(pdtOld, pdt), pdt.id, userId, DicEnum.OPER_LOG_OBJ_CATE.CTT_CONTRACT_COST_PRODUCT, "成本产品配送"); // 修改成本状态 var cost = costDal.FindById(pdt.contract_cost_id); if (cost.status_id == (int)DicEnum.COST_STATUS.ALREADY_DELIVERED) { var costOld = costDal.FindById(pdt.contract_cost_id); cost.status_id = (int)DicEnum.COST_STATUS.PENDING_DELIVERY; cost.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); cost.update_user_id = userId; costDal.Update(cost); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ctt_contract_cost>(costOld, cost), cost.id, userId, DicEnum.OPER_LOG_OBJ_CATE.CONTRACT_COST, "取消配送修改成本状态"); } // 新建库存转移信息 ivt_transfer tsf = new ivt_transfer(); tsf.id = tsfDal.GetNextIdCom(); tsf.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); tsf.update_user_id = userId; tsf.create_time = tsf.update_time; tsf.create_user_id = userId; tsf.type_id = (int)DicEnum.INVENTORY_TRANSFER_TYPE.PROJECT; tsf.product_id = (long)cost.product_id; tsf.quantity = 0 - pdt.quantity; if (cost.contract_id != null) { tsf.to_account_id = cttDal.FindById((long)cost.contract_id).account_id; } else if (cost.project_id != null) { tsf.to_account_id = proDal.FindById((long)cost.project_id).account_id; } else if (cost.task_id != null) { tsf.to_account_id = tskDal.FindById((long)cost.task_id).account_id; } tsf.to_contract_id = cost.contract_id; tsf.to_project_id = cost.project_id; tsf.to_task_id = cost.task_id; tsf.from_warehouse_id = (long)pdt.warehouse_id; tsfDal.Insert(tsf); OperLogBLL.OperLogAdd <ivt_transfer>(tsf, tsf.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER, "取消配送新建库存转移"); // 保存库存数修改 var lctPdt = dal.FindSignleBySql <ivt_warehouse_product>($"select * from ivt_warehouse_product where product_id={cost.product_id} and warehouse_id={(long)pdt.warehouse_id} and delete_time=0"); if (lctPdt != null) { var lctPdtOld = dal.FindById(lctPdt.id); lctPdt.quantity = lctPdt.quantity + pdt.quantity; lctPdt.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); lctPdt.update_user_id = userId; dal.Update(lctPdt); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ivt_warehouse_product>(lctPdtOld, lctPdt), lctPdt.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "修改库存产品库存数"); var sns = costDal.FindListBySql <string>($"select sn from ctt_contract_cost_product_sn where contract_cost_product_id={pdt.id} and delete_time=0"); if (sns == null || sns.Count == 0) { continue; } foreach (var sn in sns) { ivt_warehouse_product_sn lctPdtSn = new ivt_warehouse_product_sn(); lctPdtSn.id = lctPdtSnDal.GetNextIdCom(); lctPdtSn.create_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); lctPdtSn.create_user_id = userId; lctPdtSn.update_time = lctPdtSn.create_time; lctPdtSn.update_user_id = userId; lctPdtSn.warehouse_product_id = lctPdt.id; lctPdtSn.sn = sn; lctPdtSnDal.Insert(lctPdtSn); OperLogBLL.OperLogAdd <ivt_warehouse_product_sn>(lctPdtSn, lctPdtSn.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_SN, "取消配送产品新增库存产品串号"); ivt_transfer_sn tsfSn = new ivt_transfer_sn(); tsfSn.id = tsfSnDal.GetNextIdCom(); tsfSn.sn = sn; tsfSn.transfer_id = tsf.id; tsfSn.create_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); tsfSn.create_user_id = userId; tsfSn.update_time = tsfSn.create_time; tsfSn.update_user_id = userId; tsfSnDal.Insert(tsfSn); OperLogBLL.OperLogAdd <ivt_transfer_sn>(tsfSn, tsfSn.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER_SN, "取消配送产品新增转移产品串号"); } } } return(""); }
/// <summary> /// 配送 /// </summary> /// <param name="costPdtIds">成本产品id</param> /// <param name="isEditSaleOrder">是否修改销售订单状态</param> /// <param name="userId"></param> /// <returns></returns> public string PurchaseShip(string costPdtIds, bool isEditSaleOrder, long userId) { ctt_contract_cost_product_dal cstPdtDal = new ctt_contract_cost_product_dal(); var pdtList = cstPdtDal.FindListBySql <ctt_contract_cost_product>($"select * from ctt_contract_cost_product where id in({costPdtIds})"); if (pdtList == null || pdtList.Count == 0) { return(""); } foreach (var pdt in pdtList) { if (pdt.status_id != (int)DicEnum.CONTRACT_COST_PRODUCT_STATUS.PENDING_DISTRIBUTION) { return("状态为“待配送”的成本产品才能配送"); } } ctt_contract_cost_dal costDal = new ctt_contract_cost_dal(); ivt_transfer_dal tsfDal = new ivt_transfer_dal(); ctt_contract_dal cttDal = new ctt_contract_dal(); pro_project_dal proDal = new pro_project_dal(); sdk_task_dal tskDal = new sdk_task_dal(); ivt_warehouse_product_sn_dal lctPdtSnDal = new ivt_warehouse_product_sn_dal(); ivt_transfer_sn_dal tsfSnDal = new ivt_transfer_sn_dal(); foreach (var pdt in pdtList) { var pdtOld = cstPdtDal.FindById(pdt.id); pdt.status_id = (int)DicEnum.CONTRACT_COST_PRODUCT_STATUS.DISTRIBUTION; pdt.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); pdt.shipping_time = pdt.update_time; pdt.update_user_id = userId; cstPdtDal.Update(pdt); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ctt_contract_cost_product>(pdtOld, pdt), pdt.id, userId, DicEnum.OPER_LOG_OBJ_CATE.CTT_CONTRACT_COST_PRODUCT, "成本产品配送"); var cost = costDal.FindById(pdt.contract_cost_id); var cnt = dal.FindSignleBySql <int>($"select count(0) from ctt_contract_cost_product where contract_cost_id={pdt.contract_cost_id} and status_id<>{(int)DicEnum.CONTRACT_COST_PRODUCT_STATUS.DISTRIBUTION} and delete_time=0"); if (cnt == 0) // 产品全部已配送,修改成本状态 { var costOld = costDal.FindById(pdt.contract_cost_id); cost.status_id = (int)DicEnum.COST_STATUS.ALREADY_DELIVERED; cost.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); cost.update_user_id = userId; costDal.Update(cost); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ctt_contract_cost>(costOld, cost), cost.id, userId, DicEnum.OPER_LOG_OBJ_CATE.CONTRACT_COST, "修改成本状态已配送"); } ivt_transfer transfer = new ivt_transfer(); transfer.id = tsfDal.GetNextIdCom(); transfer.create_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); transfer.create_user_id = userId; transfer.update_time = transfer.create_time; transfer.update_user_id = userId; transfer.product_id = (long)cost.product_id; transfer.type_id = (int)DicEnum.INVENTORY_TRANSFER_TYPE.PROJECT; transfer.from_warehouse_id = (long)pdt.warehouse_id; transfer.quantity = pdt.quantity; if (cost.contract_id != null) { transfer.to_account_id = cttDal.FindById((long)cost.contract_id).account_id; } else if (cost.project_id != null) { transfer.to_account_id = proDal.FindById((long)cost.project_id).account_id; } else if (cost.task_id != null) { transfer.to_account_id = tskDal.FindById((long)cost.task_id).account_id; } transfer.to_contract_id = cost.contract_id; transfer.to_project_id = cost.project_id; transfer.to_task_id = cost.task_id; tsfDal.Insert(transfer); OperLogBLL.OperLogAdd <ivt_transfer>(transfer, transfer.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER, "产品配送转移库存"); // 保存库存数修改 var lctPdt = dal.FindSignleBySql <ivt_warehouse_product>($"select * from ivt_warehouse_product where product_id={cost.product_id} and warehouse_id={(long)pdt.warehouse_id} and delete_time=0"); if (lctPdt != null) { var lctPdtOld = dal.FindById(lctPdt.id); lctPdt.quantity = lctPdt.quantity - pdt.quantity; lctPdt.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); lctPdt.update_user_id = userId; dal.Update(lctPdt); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ivt_warehouse_product>(lctPdtOld, lctPdt), lctPdt.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "修改库存产品库存数"); var sns = costDal.FindListBySql <string>($"select sn from ctt_contract_cost_product_sn where contract_cost_product_id={pdt.id} and delete_time=0"); if (sns == null || sns.Count == 0) { continue; } foreach (var sn in sns) { var lctPdtSn = lctPdtSnDal.FindSignleBySql <ivt_warehouse_product_sn>($"select * from ivt_warehouse_product_sn where sn='{sn}' and warehouse_product_id={lctPdt.id}"); lctPdtSn.delete_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); lctPdtSn.delete_user_id = userId; lctPdtSnDal.Update(lctPdtSn); OperLogBLL.OperLogDelete <ivt_warehouse_product_sn>(lctPdtSn, lctPdtSn.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_SN, "配送产品删除库存产品串号"); ivt_transfer_sn tsfSn = new ivt_transfer_sn(); tsfSn.id = tsfSnDal.GetNextIdCom(); tsfSn.sn = sn; tsfSn.transfer_id = transfer.id; tsfSn.create_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); tsfSn.create_user_id = userId; tsfSn.update_time = tsfSn.create_time; tsfSn.update_user_id = userId; tsfSnDal.Insert(tsfSn); OperLogBLL.OperLogAdd <ivt_transfer_sn>(tsfSn, tsfSn.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER_SN, "配送产品新增转移产品串号"); } } } return(""); }
/// <summary> /// 库存产品转移 /// </summary> /// <param name="ivtProductId">库存产品id</param> /// <param name="targetLocation">目标仓库id</param> /// <param name="count">转移数</param> /// <param name="sns">序列号</param> /// <param name="note">备注</param> /// <param name="userId"></param> /// <returns></returns> public bool TransferProduct(long ivtProductId, long targetLocation, int count, string sns, string note, long userId) { var ivtPdtSource = dal.FindById(ivtProductId); // 转移的源仓库库存产品 if (count <= 0 || count > ivtPdtSource.quantity) { return(false); } // 修改源库存产品 var ivtPdtSourceOld = dal.FindById(ivtProductId); ivtPdtSource.quantity = ivtPdtSource.quantity - count; ivtPdtSource.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); ivtPdtSource.update_user_id = userId; string desc = OperLogBLL.CompareValue <ivt_warehouse_product>(ivtPdtSourceOld, ivtPdtSource); dal.Update(ivtPdtSource); OperLogBLL.OperLogUpdate(desc, ivtPdtSource.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "库存转移减少库存"); // 修改或新增目标库存产品 var ivtPdtTarget = dal.FindSignleBySql <ivt_warehouse_product>( $"select * from ivt_warehouse_product where product_id={ivtPdtSource.product_id} and warehouse_id={targetLocation} and delete_time=0"); // 转移的目标仓库库存产品 if (ivtPdtTarget == null) { ivtPdtTarget = new ivt_warehouse_product(); ivtPdtTarget.id = dal.GetNextIdCom(); ivtPdtTarget.create_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); ivtPdtTarget.create_user_id = userId; ivtPdtTarget.update_time = ivtPdtTarget.create_time; ivtPdtTarget.update_user_id = userId; ivtPdtTarget.warehouse_id = targetLocation; ivtPdtTarget.product_id = ivtPdtSource.product_id; ivtPdtTarget.quantity_minimum = ivtPdtSource.quantity_minimum; ivtPdtTarget.quantity_maximum = ivtPdtSource.quantity_maximum; ivtPdtTarget.quantity = count; dal.Insert(ivtPdtTarget); OperLogBLL.OperLogAdd <ivt_warehouse_product>(ivtPdtTarget, ivtPdtTarget.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "库存转移增加库存"); } else { var ivtPdtTargetOld = dal.FindById(ivtPdtTarget.id); ivtPdtTarget.quantity = ivtPdtTarget.quantity + count; ivtPdtTarget.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); ivtPdtTarget.update_user_id = userId; desc = OperLogBLL.CompareValue <ivt_warehouse_product>(ivtPdtTargetOld, ivtPdtTarget); dal.Update(ivtPdtTarget); OperLogBLL.OperLogUpdate(desc, ivtPdtTarget.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM, "库存转移增加库存"); } // 记录库存转移 var transferDal = new ivt_transfer_dal(); var trsf = new ivt_transfer(); trsf.id = dal.GetNextIdCom(); trsf.create_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); trsf.create_user_id = userId; trsf.update_time = trsf.create_time; trsf.update_user_id = userId; trsf.quantity = count; trsf.type_id = (int)DicEnum.INVENTORY_TRANSFER_TYPE.INVENTORY; trsf.product_id = ivtPdtSource.product_id; trsf.from_warehouse_id = (long)ivtPdtSource.warehouse_id; trsf.to_warehouse_id = targetLocation; trsf.notes = note; transferDal.Insert(trsf); OperLogBLL.OperLogAdd <ivt_transfer>(trsf, trsf.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER, "新增库存转移"); if (!string.IsNullOrEmpty(sns)) // 库存转移序号 { var snTrsfDal = new ivt_transfer_sn_dal(); var snDal = new ivt_warehouse_product_sn_dal(); var snList = snDal.FindListBySql($"select * from ivt_warehouse_product_sn where id in({sns}) and delete_time=0"); if (snList.Count != count) { return(true); } foreach (var psn in snList) { // 修改库存产品序列号所属库存产品 var psnOld = snDal.FindById(psn.id); psn.warehouse_product_id = ivtPdtTarget.id; psn.update_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); psn.update_user_id = userId; snDal.Update(psn); OperLogBLL.OperLogUpdate(OperLogBLL.CompareValue <ivt_warehouse_product_sn>(psnOld, psn), psn.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_SN, "库存转移修改库存产品序号"); // 移库产品序列号 ivt_transfer_sn tsn = new ivt_transfer_sn(); tsn.id = snTrsfDal.GetNextIdCom(); tsn.create_time = Tools.Date.DateHelper.ToUniversalTimeStamp(); tsn.create_user_id = userId; tsn.update_time = tsn.create_time; tsn.update_user_id = userId; tsn.transfer_id = trsf.id; tsn.sn = psn.sn; snTrsfDal.Insert(tsn); OperLogBLL.OperLogAdd <ivt_transfer_sn>(tsn, tsn.id, userId, DicEnum.OPER_LOG_OBJ_CATE.INVENTORY_ITEM_TRANSFER_SN, "库存转移新增移库产品序列号"); } } return(true); }