/// <summary> /// 审核通过成本变价单信息 /// </summary> /// <param name="costChangeInfo"></param> /// <returns></returns> public virtual CostChangeInfo AuditCostChange(CostChangeInfo costChangeInfo) { TransactionOptions option = new TransactionOptions(); //option.IsolationLevel = IsolationLevel.ReadUncommitted; option.Timeout = TransactionManager.DefaultTimeout; using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, option)) { costChangeInfo.CostChangeBasicInfo.Status = CostChangeStatus.Audited; //修改单据状态 costChangeInfo = CostChangeDA.UpdateCostChangeAuditStatus(costChangeInfo); //调用Inventory接口:更新库存成本 ExternalDomainBroker.UpdateCostInWhenCostChange(costChangeInfo); //调用Invoice接口:生成结算单的付款单 ExternalDomainBroker.CreatePayItem(new PayItemInfo() { OrderSysNo = costChangeInfo.SysNo.Value, PayAmt = costChangeInfo.CostChangeBasicInfo.TotalDiffAmt, OrderType = PayableOrderType.CostChange, PayStyle = PayItemStyle.Normal, CompanyCode = costChangeInfo.CompanyCode }); //记录日志 ExternalDomainBroker.CreateLog("Audit CostChange" , BizEntity.Common.BizLogType.CostChange_Audit , costChangeInfo.SysNo.Value, costChangeInfo.CompanyCode); ts.Complete(); } return(costChangeInfo); }
public ConsignAdjustInfo MaintainStatus(ConsignAdjustInfo info) { var old = ObjectFactory <IConsignAdjustDA> .Instance.LoadInfo(info.SysNo.Value); if (info.Status == ConsignAdjustStatus.Abandon && old.Status != ConsignAdjustStatus.WaitAudit) { throw new BizException("记录状态不为待审核,作废失败"); } if (info.Status == ConsignAdjustStatus.Audited && old.Status != ConsignAdjustStatus.WaitAudit) { throw new BizException("记录状态不为待审核,审核失败"); } if (info.Status == ConsignAdjustStatus.Audited) { ExternalDomainBroker.CreatePayItem(new PayItemInfo() { OrderSysNo = old.SysNo.Value, PayAmt = old.TotalAmt, OrderType = PayableOrderType.ConsignAdjust, PayStyle = PayItemStyle.Normal, CompanyCode = "8601" }); } return(ObjectFactory <IConsignAdjustDA> .Instance.UpdateStatus(info)); }
/// <summary> /// 代收结算单 - 结算 /// </summary> /// <param name="info"></param> /// <returns></returns> public GatherSettlementInfo SettleGatherSettlement(GatherSettlementInfo info) { info.SettleStatus = GatherSettleStatus.SET; GatherSettlementInfo oldSettle = GatherSettlementDA.GetVendorSettleGatherInfo(info); if (oldSettle.SettleStatus != GatherSettleStatus.AUD) { //该结算单不是已审核状态,不能进行结算操作! throw new BizException(GetMessageString("Gather_Audited_Invalid_Settle")); } GatherSettlementDA.UpdateGatherSettlementSettleStatus(info); //调用Invoice接口,创建PayItem: ExternalDomainBroker.CreatePayItem( new PayItemInfo() { OrderSysNo = info.SysNo.Value, PayAmt = info.TotalAmt, OrderType = PayableOrderType.CollectionSettlement, PayStyle = PayItemStyle.Normal }); //发送结算Message EventPublisher.Publish(new GatherSettlementSettledMessage() { SettlementSysNo = info.SysNo.Value, CurrentUserSysNo = ServiceContext.Current.UserSysNo }); //写Log: //CommonService.WriteLog<VendorSettleGatherEntity>(entity, " Settle Gather ", entity.SysNo.Value.ToString(), (int)LogType.Purchase_Verify_InStock); ExternalDomainBroker.CreateLog(" Settle Gather " , BizEntity.Common.BizLogType.Purchase_Verify_InStock , info.SysNo.Value , info.CompanyCode); return(info); }
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 CommissionMaster CreateSettleCommission(CommissionMaster req) { req = GetManualCommissionMaster(req, true); if (req.ItemList.Count == 0) { throw new BizException(GetMessageString("Commission_Error_NoItemData")); } TransactionOptions options = new TransactionOptions(); options.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted; using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options)) { req.Status = VendorCommissionMasterStatus.SET; CommissionDA.InsertCommissionMaster(req); CommissionDA.InsertCommissionItems(req); #region Insert Detail foreach (var item in req.ItemList) { if (item.DetailList != null) { item.DetailList.ForEach(p => { p.CommissionItemSysNo = item.ItemSysNo; CommissionDA.InsertCommissionDetail(p, req.CompanyCode, VendorCommissionItemType.SAC); }); } if (item.DetailOrderList != null) { item.DetailOrderList.ForEach(p => { p.CommissionItemSysNo = item.ItemSysNo; p.SalePrice = item.OrderCommissionFee; p.PromotionDiscount = 0; if (p.ReferenceType == VendorCommissionReferenceType.RMA) { p.SalePrice = -p.SalePrice; } p.Quantity = null; CommissionDA.InsertCommissionDetail(p, req.CompanyCode, VendorCommissionItemType.SOC); }); } if (item.DetailDeliveryList != null) { item.DetailDeliveryList.ForEach(p => { p.CommissionItemSysNo = item.ItemSysNo; p.SalePrice = item.DeliveryFee; p.PromotionDiscount = 0; p.Quantity = null; CommissionDA.InsertCommissionDetail(p, req.CompanyCode, VendorCommissionItemType.DEF); }); } } #endregion #region CreatePayItem ExternalDomainBroker.CreatePayItem(new PayItemInfo() { OrderSysNo = req.SysNo.Value, PayAmt = -Math.Round(req.TotalAmt ?? 0, 2), OrderType = PayableOrderType.Commission, PayStyle = PayItemStyle.Normal, BatchNumber = 1, Note = GetMessageString("Commission_ManualNote") }); #endregion scope.Complete(); } return(req); }