/// <summary> /// 加载代销结算单详细 /// </summary> /// <param name="settlementSysNo"></param> /// <returns></returns> public virtual CollectionPaymentInfo Load(int sysNo) { //加载代销结算单主信息: CollectionPaymentInfo returnEntity = new CollectionPaymentInfo(); returnEntity = CollectionPaymentDA.Load(sysNo); return(returnEntity); }
public CollectionPaymentInfo CancelAudited(CollectionPaymentInfo entity) { VerifyCancelAudited(entity); entity.AuditUserSysNo = entity.CurrentUserSysNo; //entity.AuditUserSysNo = SystemUserHelper.GetUserSystemNumber(BusinessContext.Current.OperationUserFullName, // BusinessContext.Current.OperationUserSourceDirectoryKey, BusinessContext.Current.OperationUserLoginName, // BusinessContext.Current.CompanyCode); entity.CreateTime = DateTime.Now; entity.Status = POCollectionPaymentSettleStatus.Origin; entity = CollectionPaymentDA.UpdateVendorSettleStatus(entity); //发送ESB消息 EventPublisher.Publish <CollectionPaymentCancelMessage>(new CollectionPaymentCancelMessage() { CurrentUserSysNo = ServiceContext.Current.UserSysNo, SysNo = entity.SysNo.Value }); return(entity); }
/// <summary> /// 审核 /// </summary> /// <param name="entity"></param> /// <returns></returns> public CollectionPaymentInfo Audit(CollectionPaymentInfo entity) { string OperationIP = entity.OperationIP; int? OperationUserSysNumber = entity.OperationUserSysNumber; string OperationUserUniqueName = entity.OperationUserUniqueName; entity.AuditUserSysNo = entity.CurrentUserSysNo; //entity.AuditUserSysNo = SystemUserHelper.GetUserSystemNumber(BusinessContext.Current.OperationUserFullName, // BusinessContext.Current.OperationUserSourceDirectoryKey, BusinessContext.Current.OperationUserLoginName, // BusinessContext.Current.CompanyCode); //entity.AuditUserSysNo = 3256; VerifyAudite(entity); VerifyProductPMSysNo(entity); entity.AuditTime = DateTime.Now; entity.Status = POCollectionPaymentSettleStatus.Audited; entity = CollectionPaymentDA.UpdateVendorSettleStatus(entity); //发送ESB消息 EventPublisher.Publish <CollectionPaymentAuditMessage>(new CollectionPaymentAuditMessage() { CurrentUserSysNo = ServiceContext.Current.UserSysNo, SysNo = entity.SysNo.Value }); entity.OperationIP = OperationIP; entity.OperationUserSysNumber = OperationUserSysNumber; entity.OperationUserUniqueName = OperationUserUniqueName; //CommonService.WriteLog<CollectionPaymentEntity>(entity, " Audit CollectionPayment ", entity.SysNo.Value.ToString(), (int)LogType.CollectionPayment_Audit); ExternalDomainBroker.CreateLog(" Audit CollectionPayment " , BizEntity.Common.BizLogType.POC_VendorSettle_Audit , entity.SysNo.Value , entity.CompanyCode); return(entity); }
public CollectionPaymentInfo CancelAbandon(CollectionPaymentInfo entity) { string OperationIP = entity.OperationIP; int? OperationUserSysNumber = entity.OperationUserSysNumber; string OperationUserUniqueName = entity.OperationUserUniqueName; entity.CreateUserSysNo = entity.CreateUserSysNo; VerifyCancelAbandon(entity); entity.Status = POCollectionPaymentSettleStatus.Origin; //将代收代付转财务记录的状态修改为人工已建 foreach (var item in entity.SettleItems) { item.ConsignToAccLogInfo.ConsignToAccStatus = ConsignToAccountLogStatus.ManualCreated; } using (TransactionScope scope = new TransactionScope()) { entity = CollectionPaymentDA.UpdateVendorSettleStatus(entity); //更新代销转财务记录状态 UpdateConsignToAccLogStatus(entity); scope.Complete(); } entity.OperationIP = OperationIP; entity.OperationUserSysNumber = OperationUserSysNumber; entity.OperationUserUniqueName = OperationUserUniqueName; ExternalDomainBroker.CreateLog(" Abandon Cancel CollectionPayment " , BizEntity.Common.BizLogType.POC_VendorSettle_Abandon , entity.SysNo.Value , entity.CompanyCode); return(entity); }
public CollectionPaymentInfo CancelSettled(CollectionPaymentInfo entity) { string OperationIP = entity.OperationIP; int? OperationUserSysNumber = entity.OperationUserSysNumber; string OperationUserUniqueName = entity.OperationUserUniqueName; entity.SettleUserSysNo = entity.CurrentUserSysNo; VerifyCancelSettled(entity); //entity.SettleUserSysNo = SystemUserHelper.GetUserSystemNumber(BusinessContext.Current.OperationUserFullName, //BusinessContext.Current.OperationUserSourceDirectoryKey, BusinessContext.Current.OperationUserLoginName, //BusinessContext.Current.CompanyCode); //1 将所有以结算的财务单设置为ManualCreated状态 //VendorSettleDAL dal = new VendorSettleDAL(); //统计规则 List <ConsignSettlementRulesInfo> quantityCountList = CollectionPaymentDA.GetSettleRuleQuantityCount(entity.SysNo.Value); foreach (var quantityCount in quantityCountList) { //规则状态到结算这一步,一定会是已生效或者是已过期,还包括已终止,其他的一律视为异常 if (quantityCount.Status != ConsignSettleRuleStatus.Disable && quantityCount.Status != ConsignSettleRuleStatus.Enable && quantityCount.Status != ConsignSettleRuleStatus.Stop) { throw new BizException(string.Format(GetMessageString("Consign_Check_InvalidConsignSettleRule"), quantityCount.SettleRulesName)); } } using (TransactionScope scope = new TransactionScope()) { #region 结算规则操作 foreach (var quantityCount in quantityCountList) { //计算结算数量 quantityCount.SettledQuantity -= quantityCount.SubmitSettleQuantity; //修改规则状态 switch (quantityCount.Status) { case ConsignSettleRuleStatus.Enable: quantityCount.IsNeedUpdateStatus = true; break; case ConsignSettleRuleStatus.Disable: quantityCount.IsNeedUpdateStatus = true; quantityCount.Status = ConsignSettleRuleStatus.Enable; break; case ConsignSettleRuleStatus.Stop: //已终止状态将不在处理 break; default: break; } if (quantityCount.SettledQuantity.Value == 0) { //刚好使用到的规则的商品数量为0,证明只有该数据使用规则,将其变成以未生效状态 quantityCount.Status = ConsignSettleRuleStatus.Available; } if (quantityCount.IsNeedUpdateStatus) { //修改结算规则状态为已生效 ObjectFactory <IConsignSettlementDA> .Instance.UpdateConsignSettleRuleStatusAndQuantity(quantityCount.RuleSysNo.Value, quantityCount.Status.Value, quantityCount.SettledQuantity.Value); } } #endregion foreach (CollectionPaymentItem item in entity.SettleItems) { item.ConsignToAccLogInfo.ConsignToAccStatus = ConsignToAccountLogStatus.ManualCreated; item.ConsignToAccLogInfo.Cost = 0; item.ConsignToAccLogInfo.FoldCost = null; ConsignSettlementDA.CancelSettleConsignToAccountLog(item.ConsignToAccLogInfo.LogSysNo.Value); } //2 修改结算单的状态 entity.SettleTime = DateTime.Now; entity.Status = POCollectionPaymentSettleStatus.Audited; entity.AuditUserSysNo = entity.CurrentUserSysNo; entity = this.CollectionPaymentDA.UpdateVendorSettleStatus(entity); //发送ESB消息 EventPublisher.Publish <CollectionPaymentCancelSettlementMessage>(new CollectionPaymentCancelSettlementMessage() { CurrentUserSysNo = ServiceContext.Current.UserSysNo, SysNo = entity.SysNo.Value }); scope.Complete(); } ExternalDomainBroker.CreateLog(" CancelSettled VendorSettle " , BizEntity.Common.BizLogType.POC_VendorSettle_CancelSettle , entity.SysNo.Value , entity.CompanyCode); //记录规则更新日志 foreach (var qLog in quantityCountList.Where(p => p.IsNeedUpdateStatus)) { ExternalDomainBroker.CreateLog("CancelSettled VendorSettle Update SettleRule" , BizEntity.Common.BizLogType.ConsignSettleRule_Update , qLog.RuleSysNo.Value , qLog.CompanyCode); } return(entity); }
public CollectionPaymentInfo Settle(CollectionPaymentInfo entity) { string OperationIP = entity.OperationIP; int? OperationUserSysNumber = entity.OperationUserSysNumber; string OperationUserUniqueName = entity.OperationUserUniqueName; entity.SettleUserSysNo = entity.CurrentUserSysNo; VerifySettle(entity); this.VerifySettleItems(entity, SettlementVerifyType.SETTLE); //entity.SettleUserSysNo = SystemUserHelper.GetUserSystemNumber(BusinessContext.Current.OperationUserFullName, // BusinessContext.Current.OperationUserSourceDirectoryKey, BusinessContext.Current.OperationUserLoginName, // BusinessContext.Current.CompanyCode); //CollVendorSettleDAL dal = collVendorSettleDAL; //entity.CreateUserSysNo = 3256; //统计规则 string text = string.Empty; List <ConsignSettlementRulesInfo> ruleList = CollectionPaymentDA.GetSettleRuleQuantityCount(entity.SysNo.Value); foreach (var currentRule in ruleList) { //规则状态到结算这一步,一定会是已生效或者是未生效,其他的一律视为异常 if (currentRule.Status != ConsignSettleRuleStatus.Available && currentRule.Status != ConsignSettleRuleStatus.Enable) { //规则已经是无效状态,抛出异常 text = string.Format("无效的规则:{0}", currentRule.SettleRulesName); throw new BizException(text); } //超过结算数量 bool result = false; if (currentRule.SettleRulesQuantity.HasValue) { result = currentRule.SettleRulesQuantity.Value - (currentRule.SettledQuantity ?? 0) - (currentRule.SubmitSettleQuantity ?? 0) < 0; } if (result) { //超过结算数量,抛出异常 throw new BizException(string.Format(GetMessageString("Consign_Check_MoreThanSettleRuleQuantity"), currentRule.SettleRulesName)); } } using (TransactionScope scope = new TransactionScope()) { #region 结算规则操作 foreach (var quantityCount in ruleList) { quantityCount.SettledQuantity = quantityCount.SettledQuantity.Value + quantityCount.SubmitSettleQuantity; //修改规则状态 if (quantityCount.Status == ConsignSettleRuleStatus.Available) { quantityCount.Status = ConsignSettleRuleStatus.Enable; } //如果数量为0了,将修改状态为已过期 if (quantityCount.SettleRulesQuantity.HasValue && quantityCount.SettleRulesQuantity.Value == (quantityCount.SettledQuantity ?? 0)) { quantityCount.Status = ConsignSettleRuleStatus.Disable; quantityCount.SettledQuantity = quantityCount.SettleRulesQuantity; } //修改结算规则状态为已生效 ObjectFactory <IConsignSettlementDA> .Instance.UpdateConsignSettleRuleStatusAndQuantity(quantityCount.RuleSysNo.Value, quantityCount.Status.Value, quantityCount.SettledQuantity.Value); } #endregion //更改每个item的财务记录为最终结算 foreach (CollectionPaymentItem item in entity.SettleItems) { if (ConsignToAccountLogStatus.Settled == item.ConsignToAccLogInfo.ConsignToAccStatus.Value) { //当前商品的代销转财务记录(记录号:{0})的状态已经为“已结算”状态! throw new BizException(string.Format(GetMessageString("Consign_AccStatus_Settled_Check"), item.ConsignToAccLogInfo.ConsignToAccStatus.Value)); } if (item.Cost < 0) { //当前商品(商品系统编号:{0})的结算金额小于0! throw new BizException(string.Format(GetMessageString("Consign_Products_SettleAmt_Check"), item.ConsignToAccLogInfo.ProductSysNo.Value)); } decimal foldCost = item.ConsignToAccLogInfo.CreateCost.Value - item.Cost; ConsignSettlementDA.SettleConsignToAccountLog(item.ConsignToAccLogInfo.LogSysNo.Value, item.Cost, foldCost); } //2 修改结算单的状态 entity.SettleTime = DateTime.Now; entity.Status = POCollectionPaymentSettleStatus.Settled; entity = this.CollectionPaymentDA.UpdateVendorSettleStatus(entity); //发送ESB消息 EventPublisher.Publish <CollectionPaymentSettlementMessage>(new CollectionPaymentSettlementMessage() { CurrentUserSysNo = ServiceContext.Current.UserSysNo, SysNo = entity.SysNo.Value }); scope.Complete(); } //结算商品期间过期状态判断 foreach (var quantityCount in ruleList) { if (quantityCount.Status == ConsignSettleRuleStatus.Enable) { //如果这期间的结算商品已经全部结算完毕,那么这个结算规则也无效,对于是否还有剩余将无效 ObjectFactory <IConsignSettlementDA> .Instance.UpdateExistsConsignSettleRuleItemStatus(quantityCount.RuleSysNo.Value); } } //3 生成结算单的付款单 //调用Invoice接口:生成结算单的付款单 ExternalDomainBroker.CreatePayItem(new PayItemInfo() { OrderSysNo = entity.SysNo.Value, PayAmt = entity.TotalAmt, OrderType = PayableOrderType.CollectionPayment, PayStyle = PayItemStyle.Normal }); ExternalDomainBroker.CreateLog(" Settled VendorSettle " , BizEntity.Common.BizLogType.POC_VendorSettle_Settle , entity.SysNo.Value , entity.CompanyCode); //记录规则更新日志 foreach (var qLog in ruleList) { ExternalDomainBroker.CreateLog("Settled VendorSettle Update SettleRule" , BizEntity.Common.BizLogType.ConsignSettleRule_Update , qLog.RuleSysNo.Value , qLog.CompanyCode); } return(entity); }
public CollectionPaymentInfo Update(CollectionPaymentInfo entity) { string OperationIP = entity.OperationIP; int? OperationUserSysNumber = entity.OperationUserSysNumber; string OperationUserUniqueName = entity.OperationUserUniqueName; VerifyUpdate(entity); VerifySettleItems(entity, SettlementVerifyType.UPDATE); VerifyProductPMSysNo(entity); VerityOverConsignRuleQuantity(entity); List <CollectionPaymentItem> list = new List <CollectionPaymentItem>(); using (TransactionScope scope = new TransactionScope()) { //1 删除需要delete的item foreach (CollectionPaymentItem item in entity.SettleItems) { if (item.SettleSysNo.HasValue && item.SettleSysNo == -1) { list.Add(item); } } if (list.Count > 0) { foreach (CollectionPaymentItem item in list) { //将需要删除的Item对应的Acclog状态改为[初始状态:0] //VendorDA.UpdateConsignToAccountLogStatus(item.ConsignToAccLogInfo.LogSysNo.Value, ConsignToAccountLogStatus.Origin); this.ConsignSettlementDA.UpdateConsignToAccountLogStatus( item.ConsignToAccLogInfo.LogSysNo.Value, ConsignToAccountLogStatus.Origin); CollectionPaymentDA.DeleteSettleItem(item); entity.SettleItems.Remove(item); } } //将所有选中的SettleItem状态改为[人工已建:4] var validItems = entity.SettleItems.Except(list); foreach (var item in validItems) { //如果item的sysno没有值,则表示是新增加的item,需要更新对应的ConfignToAcclog if (!item.ItemSysNo.HasValue) { item.ConsignToAccLogInfo.ConsignToAccStatus = ConsignToAccountLogStatus.ManualCreated; this.ConsignSettlementDA.UpdateConsignToAccountLogStatus(item.ConsignToAccLogInfo.LogSysNo.Value, ConsignToAccountLogStatus.ManualCreated); } } //2 更新结算单 CollectionPaymentDA.Update(entity); scope.Complete(); } //3 记录删除的items foreach (CollectionPaymentItem item in list) { if (item.ItemSysNo.HasValue) { item.OperationIP = OperationIP; item.OperationUserSysNumber = OperationUserSysNumber; item.OperationUserUniqueName = OperationUserUniqueName; //CommonService.WriteLog<CollectionPaymentItem>(item, " Deleted CollectionPaymentItem ", item.SysNo.Value.ToString(), (int)LogType.CollectionPayment_Item_Delete); ExternalDomainBroker.CreateLog(" Deleted CollectionPaymentItem " , BizEntity.Common.BizLogType.POC_VendorSettle_Item_Delete , item.ItemSysNo.Value , entity.CompanyCode); } } //4 记录修改的items foreach (CollectionPaymentItem item in entity.SettleItems) { if (item.ItemSysNo.HasValue) { item.OperationIP = OperationIP; item.OperationUserSysNumber = OperationUserSysNumber; item.OperationUserUniqueName = OperationUserUniqueName; //CommonService.WriteLog<CollectionPaymentItem>(item, " Updated CollectionPaymentSettleItem ", item.SysNo.Value.ToString(), (int)LogType.CollectionPayment_Item_Update); ExternalDomainBroker.CreateLog(" Updated CollectionPaymentSettleItem " , BizEntity.Common.BizLogType.POC_VendorSettle_Item_Update , item.ItemSysNo.Value , entity.CompanyCode); } } return(entity); }
/// <summary> /// 加载代销结算单详细 /// </summary> /// <param name="settlementSysNo"></param> /// <returns></returns> public virtual CollectionPaymentInfo Create(CollectionPaymentInfo entity) { //去除已经删除的Item(SysNo=-1) 次方法已经在Portal加过了,此处只为以防万一了 entity.SettleItems = (from tItem in entity.SettleItems where tItem.SettleSysNo != -1 select tItem).ToList(); string OperationIP = string.Empty; string OperationUserUniqueName = string.Empty; VerifyCreate(entity); VerifySettleItems(entity, SettlementVerifyType.CREATE); VerifyProductPMSysNo(entity); //VerityOverConsignRuleQuantity(entity); //entity.CreateUserSysNo = SystemUserHelper.GetUserSystemNumber(BusinessContext.Current.OperationUserFullName, // BusinessContext.Current.OperationUserSourceDirectoryKey, BusinessContext.Current.OperationUserLoginName, // BusinessContext.Current.CompanyCode); entity.CreateUserSysNo = entity.CurrentUserSysNo;; entity.CreateTime = DateTime.Now; entity.Status = POCollectionPaymentSettleStatus.Origin; //修改代销转财务记录的状态 foreach (var item in entity.SettleItems) { item.ConsignToAccLogInfo.ConsignToAccStatus = ConsignToAccountLogStatus.ManualCreated; //item. } //用于收集操作过的结算单 List <CollectionPaymentInfo> settleEntityList = new List <CollectionPaymentInfo>(); //计算返点,返点总额将会平均分配到以下结算单,当返点总额大于单个结算单的返点额,那单个结算单返点将和计算单总额相等 //剩余返点额将在下个结算单中使用 decimal totalUsingReturnPoint = entity.UsingReturnPoint ?? 0; using (TransactionScope scope = new TransactionScope()) { //按照仓库的不同自动分结算单 var stockSysNoList = entity.SettleItems.Select(p => p.ConsignToAccLogInfo.StockSysNo).Distinct(); foreach (int?stockSysNo in stockSysNoList) { //需要深度赋值新的类 var newEntity = SerializationUtility.DeepClone <CollectionPaymentInfo>(entity); newEntity.SourceStockInfo.SysNo = stockSysNo; var tempSettleList = new List <CollectionPaymentItem>(); tempSettleList.AddRange(newEntity.SettleItems.Where(p => p.ConsignToAccLogInfo.StockSysNo == stockSysNo)); //计算总结算数 newEntity.TotalAmt = tempSettleList.Sum(p => p.Cost * p.ConsignToAccLogInfo.ProductQuantity.Value); newEntity.SettleItems = tempSettleList; //判断规则数量是否还有剩余 newEntity = CollectionPaymentDA.Create(newEntity); entity.SysNo = newEntity.SysNo; //将操作完成的收集在临时列表中 settleEntityList.Add(newEntity); } //更新代销转财务记录状态 settleEntityList.ForEach(x => { UpdateConsignToAccLogStatus(x); }); //发送ESB消息 EventPublisher.Publish <CollectionPaymentCreateMessage>(new CollectionPaymentCreateMessage() { CurrentUserSysNo = ServiceContext.Current.UserSysNo, SysNo = entity.SysNo.Value }); scope.Complete(); } foreach (var newEntity in settleEntityList) { //执行其它操作 newEntity.OperationIP = OperationIP; newEntity.OperationUserSysNumber = entity.CreateUserSysNo; newEntity.OperationUserUniqueName = OperationUserUniqueName; //CommonService.WriteLog<CollectionPaymentEntity>(newEntity, " Create VendorSettle ", newEntity.SysNo.Value.ToString(), (int)LogType.CollectionPayment_Create); VendorInfo vendor = VendorDA.LoadVendorInfo(newEntity.VendorInfo.SysNo.Value); if (vendor.VendorFinanceInfo.IsAutoAudit != null && vendor.VendorFinanceInfo.IsAutoAudit == true) { try { Audit(newEntity); } catch (Exception ex) { //MailService.SendMail(ConfigurationManager.AppSettings["VendorSettleFrom"], ConfigurationManager.AppSettings["VendorSettleTo"], "代销结算单自动审核", newEntity.SysNo.ToString() + ":" + ex.ErrorDescription); } //自动结算 entity = Settle(newEntity); } } return(entity); }