public void GetVendorList() { var connection = new SQLServerConnect(); connection.SetupConnectionString(UserName, UserPassword, Server, Database); try { connection.ReturnSQLDataReader("CREATE TABLE [dbo].[Vendor]( [VendorID] [int] NOT NULL, [IsActive] [bit] NOT NULL CONSTRAINT [DF_Vendor_IsActive] DEFAULT ((1)), [VendorName] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [MainPhone] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [ContactName] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [ContactEmail] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [ContactPhone] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [Website] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [Address] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [Address2] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [City] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [State] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [Zip] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,[Country] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,CONSTRAINT [PK_Vendor] PRIMARY KEY CLUSTERED ( [VendorID] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]", null); connection.ReturnSQLDataReader("INSERT INTO [dbo].[Vendor] ([VendorID], [VendorName], [MainPhone], [ContactName], [ContactEmail], [ContactPhone],[Website],[Address],[Address2],[City],[State],[Zip],[Country])VALUES(1, 'Vendor 1', '(xx) xxx-xxxx', 'Contact 1', 'Contact Email', '(ZZZ) ZZZ-ZZZZ', 'Website', 'Address', 'Address2', 'City', 'AZ', 'XXXX-XXXX', 'Country')", null); connection.ReturnSQLDataReader("INSERT INTO [dbo].[Vendor] ([VendorID], [VendorName], [MainPhone], [ContactName], [ContactEmail], [ContactPhone],[Website],[Address],[Address2],[City],[State],[Zip],[Country])VALUES(2, 'Vendor 2', '(xx) xxx-xxxx', 'Contact 2', 'Contact Email', '(ZZZ) ZZZ-ZZZZ', 'Website', 'Address', 'Address2', 'City', 'AZ', 'XXXX-XXXX', 'Country')", null); connection.ReturnSQLDataReader("INSERT INTO [dbo].[Vendor] ([VendorID], [VendorName], [MainPhone], [ContactName], [ContactEmail], [ContactPhone],[Website],[Address],[Address2],[City],[State],[Zip],[Country])VALUES(3, 'Vendor 3', '(xx) xxx-xxxx', 'Contact 3', 'Contact Email', '(ZZZ) ZZZ-ZZZZ', 'Website', 'Address', 'Address2', 'City', 'AZ', 'XXXX-XXXX', 'Country')", null); var reader = new VendorDA { GetAll = true }; string connStr = String.Format( "Data Source='{0}'; database={1}; user id={2}; password={3}", Server, Database, UserName, UserPassword); reader.SetupConnectionString(connStr); var vendorList = reader.Execute(); Assert.AreEqual(3, vendorList.Count); Assert.AreEqual(1, vendorList[0].VendorID); Assert.AreEqual("Vendor 1", vendorList[0].VendorName); Assert.AreEqual(2, vendorList[1].VendorID); Assert.AreEqual("Vendor 2", vendorList[1].VendorName); Assert.AreEqual(3, vendorList[2].VendorID); Assert.AreEqual("Vendor 3", vendorList[2].VendorName); } finally { connection.ReturnSQLDataReader("Drop Table Vendor", null); } }
/// <summary> /// 批量创建PO单: /// </summary> /// <param name="list"></param> public virtual BatchCreateBasketResultInfo BatchCreatePurchaseOrder(List <BasketItemsInfo> list) { List <ProductPMLine> tPMLineList = ExternalDomainBroker.GetProductLineInfoByPM(ServiceContext.Current.UserSysNo); bool tIsManager = list[0].IsManagerPM.Value; //如果没有产品线权限并且不是高级PM,则不允许创建 //if ((tPMLineList == null || tPMLineList.Count == 0) && !tIsManager) //{ // throw new BizException(GetMessageString("Basket_PMNoLine")); //} FillProductLineInfo(list); string createCompanyCode = string.Empty; var conditionList = new List <BasketItemsInfo>(); List <int> POSysNo = new List <int>(); string errorMsg = ""; //根据编号加载商品信息: string exceptionMsg = CheckBasketInfo(ref list); errorMsg += exceptionMsg; List <PurchaseOrderInfo> POs = new List <PurchaseOrderInfo>(); //if (!string.IsNullOrEmpty(exceptionMsg) || exceptionMsg.Length > 0) //{ // throw new BizException(exceptionMsg); //} list.ForEach(x => { //是否中转: if (x.IsTransfer == 1) { x.StockSysNo = 5000 + x.StockSysNo; } createCompanyCode = x.CompanyCode; }); //默认采购单类型为:正常;增值税率:0.17;结算货币:人民币(1);送货类型:厂房直送(12) var group = from item in list group item by new { item.IsConsign, item.StockSysNo, item.VendorSysNo, item.PMSysNo, item.IsTransfer, item.ProductLine_SysNo } into g select new { Key = g.Key, ResultList = g }; foreach (var item in group) { POs.Clear(); var ZPO = from i in item.ResultList where i.Quantity >= 0 select i; var FPO = from i in item.ResultList where i.Quantity < 0 select i; //正采购 #region ZPO if (ZPO.Count() > 0) { PurchaseOrderInfo modelPO = GetInitPO(createCompanyCode); modelPO.VendorInfo = VendorProcessor.LoadVendorInfo(item.Key.VendorSysNo.Value); modelPO.PurchaseOrderBasicInfo.ConsignFlag = (PurchaseOrderConsignFlag)Enum.Parse(typeof(PurchaseOrderConsignFlag), item.Key.IsConsign.Value.ToString()); if (null == modelPO.PurchaseOrderBasicInfo.StockInfo) { modelPO.PurchaseOrderBasicInfo.StockInfo = new BizEntity.Inventory.StockInfo(); } modelPO.PurchaseOrderBasicInfo.StockInfo.SysNo = item.Key.StockSysNo; if (null == modelPO.PurchaseOrderBasicInfo.ProductManager) { modelPO.PurchaseOrderBasicInfo.ProductManager = new BizEntity.IM.ProductManagerInfo(); } //注释原因:因加入产品线验证,此处的归属PM应为产品线的PM //modelPO.PurchaseOrderBasicInfo.ProductManager.SysNo = item.Key.PMSysNo; modelPO.PurchaseOrderBasicInfo.PurchaseOrderType = PurchaseOrderType.Normal; modelPO.PurchaseOrderBasicInfo.PayType.SysNo = VendorDA.LoadVendorPayPeriodType(item.Key.VendorSysNo); string companyCode = string.Empty; foreach (var POitem in ZPO) { modelPO.PurchaseOrderBasicInfo.PurchaseOrderType = PurchaseOrderType.Normal; //增加产品线和主PM字段回写 modelPO.PurchaseOrderBasicInfo.IsManagerPM = POitem.IsManagerPM; modelPO.PurchaseOrderBasicInfo.ProductManager.SysNo = POitem.PMSysNo; modelPO.PurchaseOrderBasicInfo.ProductLineSysNo = POitem.ProductLine_SysNo; modelPO.POItems.Add(new PurchaseOrderItemInfo() { ItemSysNo = POitem.ItemSysNo, ProductSysNo = POitem.ProductSysNo, Quantity = 0, ReadyQuantity = POitem.ReadyQuantity, OrderPrice = POitem.OrderPrice, ProductID = POitem.ProductID, PurchaseQty = POitem.Quantity, UnitCost = Decimal.Round(POitem.OrderPrice.Value * modelPO.PurchaseOrderBasicInfo.ExchangeRate.Value, 2), Weight = POitem.Weight, ApportionAddOn = 0, ReturnCost = 0, BriefName = POitem.BriefName, AvailableQty = BasketDA.AvailableQtyByProductSysNO(POitem.ProductSysNo.Value), M1 = BasketDA.M1ByProductSysNO(POitem.ProductSysNo.Value), JingDongPrice = BasketDA.JDPriceByProductSysNO(POitem.ProductSysNo.Value), CompanyCode = POitem.CompanyCode }); companyCode = POitem.CompanyCode; } modelPO.CompanyCode = companyCode; POs.Add(modelPO); } #endregion //负采购 #region FPO if (FPO.Count() > 0) { PurchaseOrderInfo modelPO = GetInitPO(createCompanyCode); modelPO.VendorInfo = VendorProcessor.LoadVendorInfo(item.Key.VendorSysNo.Value); modelPO.PurchaseOrderBasicInfo.ConsignFlag = (PurchaseOrderConsignFlag)Enum.Parse(typeof(PurchaseOrderConsignFlag), item.Key.IsConsign.Value.ToString()); modelPO.PurchaseOrderBasicInfo.StockInfo.SysNo = item.Key.StockSysNo; modelPO.PurchaseOrderBasicInfo.ProductManager.SysNo = item.Key.PMSysNo; modelPO.PurchaseOrderBasicInfo.PurchaseOrderType = PurchaseOrderType.Negative; modelPO.PurchaseOrderBasicInfo.PayType.SysNo = VendorDA.LoadVendorPayPeriodType(item.Key.VendorSysNo); modelPO.PurchaseOrderBasicInfo.MemoInfo.Memo = GetMessageString("Basket_Memo_FPO"); string companyCode = string.Empty; foreach (var POitem in FPO) { //增加产品线和主PM字段回写 modelPO.PurchaseOrderBasicInfo.IsManagerPM = POitem.IsManagerPM; modelPO.PurchaseOrderBasicInfo.ProductManager.SysNo = POitem.ProductLine_PMSysNo; modelPO.PurchaseOrderBasicInfo.ProductLineSysNo = POitem.ProductLine_SysNo; modelPO.POItems.Add(new PurchaseOrderItemInfo() { ItemSysNo = POitem.ItemSysNo, ProductSysNo = POitem.ProductSysNo, Quantity = 0, OrderPrice = POitem.OrderPrice, ProductID = POitem.ProductID, PurchaseQty = POitem.Quantity, UnitCost = Decimal.Round(POitem.OrderPrice.Value * modelPO.PurchaseOrderBasicInfo.ExchangeRate.Value, 2), Weight = POitem.Weight, ApportionAddOn = 0, ReturnCost = 0, BriefName = POitem.BriefName, AvailableQty = BasketDA.AvailableQtyByProductSysNO(POitem.ProductSysNo.Value), M1 = BasketDA.M1ByProductSysNO(POitem.ProductSysNo.Value), JingDongPrice = BasketDA.JDPriceByProductSysNO(POitem.ProductSysNo.Value), CompanyCode = POitem.CompanyCode }); companyCode = POitem.CompanyCode; } modelPO.CompanyCode = companyCode; POs.Add(modelPO); } #endregion int poItemCountNumber = 80; if (!string.IsNullOrEmpty(AppSettingManager.GetSetting("PO", "PoItemCountNumber"))) { poItemCountNumber = int.Parse(AppSettingManager.GetSetting("PO", "PoItemCountNumber")); } foreach (var poentity in POs) { try { if (poentity.PurchaseOrderBasicInfo.MemoInfo == null) { poentity.PurchaseOrderBasicInfo.MemoInfo = new PurchaseOrderMemoInfo(); } if (poentity.PurchaseOrderBasicInfo.ETATimeInfo == null) { poentity.PurchaseOrderBasicInfo.ETATimeInfo = new PurchaseOrderETATimeInfo(); } if (poentity.EIMSInfo == null) { poentity.EIMSInfo = new PurchaseOrderEIMSInfo() { EIMSInfoList = new List <EIMSInfo>() }; } if (poentity.ReceivedInfoList == null) { poentity.ReceivedInfoList = new List <PurchaseOrderReceivedInfo>(); } //如果在一个po单中Item超过80种,则自动拆分 每80种商品一单 if (poentity.POItems.Count > poItemCountNumber) { //string listvalue = SerializeHelper.JsonSerializer(poentity); PurchaseOrderInfo posResult = poentity; //SerializeHelper.JsonDeserialize<IPP.Oversea.CN.POASNMgmt.WebModel.ViewModels.PO.POModel>(listvalue); var poitems = new List <PurchaseOrderItemInfo>(); for (int i = 1; i <= poentity.POItems.Count; i++) { poitems.Add(poentity.POItems[i - 1]); if ((i % poItemCountNumber == 0 && i != 0) || i == poentity.POItems.Count) { posResult.POItems = poitems; var poResult = PurchaseOrderProcessor.CreatePO(posResult); POSysNo.Add(poResult.SysNo.Value); poitems.Clear(); } } } else { var poResult = PurchaseOrderProcessor.CreatePO(poentity); POSysNo.Add(poResult.SysNo.Value); } } catch (Exception ex) { errorMsg += ex.Message + Environment.NewLine; } } } return(new BatchCreateBasketResultInfo() { SucessPOSysNos = POSysNo, ErrorMsg = errorMsg }); }
/// <summary> /// 验证导入的采购篮数据是否合法并创建采购篮 /// </summary> /// <param name="itemList"></param> /// <returns></returns> public virtual List <BasketItemsInfo> BatchImportAndCreateBasketItem(List <BasketItemsInfo> itemList, bool isThrowException) { if (null == itemList || 0 == itemList.Count) { //没有需要导入的数据 throw new BizException(GetMessageString("Basket_NoDataImport")); } foreach (var entity in itemList) { #region [Check实体逻辑] if (!entity.LastVendorSysNo.HasValue) { //供应商编号无效 entity.ErrorMessage += GetMessageString("Basket_VendorSysNoInvalid"); if (isThrowException) { throw new BizException(GetMessageString("Basket_VendorSysNoInvalid")); } } var vendor = VendorDA.LoadVendorInfo(entity.LastVendorSysNo.Value); if (vendor == null) { //供应商无效 entity.ErrorMessage += GetMessageString("Basket_VendorInvalid"); if (isThrowException) { throw new BizException(GetMessageString("Basket_VendorInvalid")); } } else { entity.CompanyCode = vendor.CompanyCode; entity.VendorSysNo = vendor.SysNo.Value; } if (!entity.Quantity.HasValue || entity.Quantity == 0) { //{0}:该商品数量不能为空! entity.ErrorMessage += string.Format(GetMessageString("Basket_ProductQtyEmpty"), entity.ProductID); if (isThrowException) { throw new BizException(string.Format(GetMessageString("Basket_ProductQtyEmpty"), entity.ProductID)); } } if (!entity.OrderPrice.HasValue) { //采购价格为空 entity.ErrorMessage += GetMessageString("Basket_PurchasePriceEmpty"); if (isThrowException) { throw new BizException(GetMessageString("Basket_PurchasePriceEmpty")); } } entity.ProductSysNo = BasketDA.GetItemSysNoByItemID(entity.ProductID, entity.CompanyCode); if (!entity.ProductSysNo.HasValue || entity.ProductSysNo == 0) { entity.ErrorMessage += GetMessageString("Basket_ProductSysNoInvalid"); if (isThrowException) { throw new BizException(GetMessageString("Basket_ProductSysNoInvalid")); } } entity.StockSysNo = BasketDA.GetStockSysNoByName(entity.StockName, entity.CompanyCode); if (!entity.StockSysNo.HasValue || entity.StockSysNo == 0) { entity.ErrorMessage += GetMessageString("Basket_StocknameInvalid"); if (isThrowException) { throw new BizException(GetMessageString("Basket_StocknameInvalid")); } } if (BasketDA.CheckProductHasExistInBasket(entity) && !entity.ItemSysNo.HasValue) { //添加采购篮中item记录是否重复判断条件:采购员,供应商,item,目标仓库 //{0}:该商品已存在于采购篮中! entity.ErrorMessage += string.Format(GetMessageString("Basket_ItemExists"), entity.ProductID); if (isThrowException) { throw new BizException(string.Format(GetMessageString("Basket_ItemExists"), entity.ProductID)); } } #endregion if (string.IsNullOrEmpty(entity.ErrorMessage)) { entity.ReadyQuantity = 0; var resultEntity = BasketDA.CreateBasketItemForPrepare(entity); //写LOG: //CommonService.WriteLog<BasketItemEntity>(entity, " Batch Created BaksetItem ", entity.SysNo.Value.ToString(), (int)LogType.PO_Basket_Insert); ExternalDomainBroker.CreateLog(" Batch Created BaksetItem " , BizEntity.Common.BizLogType.Purchase_Basket_Insert , entity.ItemSysNo.Value , entity.CompanyCode); } } return(itemList); }
/// <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); }
public void InsertVendor() { var connection = new SQLServerConnect(); connection.SetupConnectionString(UserName, UserPassword, Server, Database); try { connection.ReturnSQLDataReader("CREATE TABLE [dbo].[Vendor]( [VendorID] [int] NOT NULL, [IsActive] [bit] NOT NULL CONSTRAINT [DF_Vendor_IsActive] DEFAULT ((1)), [VendorName] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [MainPhone] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [ContactName] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [ContactEmail] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [ContactPhone] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [Website] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [Address] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [Address2] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [City] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [State] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [Zip] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,[Country] [nvarchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,CONSTRAINT [PK_Vendor] PRIMARY KEY CLUSTERED ( [VendorID] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]", null); var item = new Vendor { VendorID = 1, VendorName = "Vendor 1", IsActive = true, MainPhone = "XXX.XXX.XXXX", ContactName = "Testing", ContactEmail = "PCode", ContactPhone = "Desc", Website = "Name", Address = "Size", Address2 = "Section", City = "City", State = "State", Zip = "Zip", Country = "Country" }; var reader = new VendorDA { WorkingItem = item, InsertUpdateData = true }; string connStr = String.Format( "Data Source='{0}'; database={1}; user id={2}; password={3}", Server, Database, UserName, UserPassword); reader.SetupConnectionString(connStr); var vendorList = reader.Execute(); Assert.AreEqual(0, vendorList.Count); reader = new VendorDA { GetAll = true }; reader.SetupConnectionString(connStr); vendorList = reader.Execute(); Assert.AreEqual(1, vendorList.Count); Assert.AreEqual("Vendor 1", vendorList[0].VendorName); } finally { connection.ReturnSQLDataReader("Drop Table Vendor", null); } }