public virtual Task <TaskResponse> Execute(ISapDocumentInput input) { throw new NotImplementedException(); }
public override async Task <TaskResponse> Execute(ISapDocumentInput input) { log.Info($"Begin to create a purchase order {((SAPOrderInput)input).Id}"); TaskResponse response = new TaskResponse() { Success = true, Message = string.Empty }; string message = string.Empty; try { var purchaseOrder = await _purchaseOrderService.GetAsync(((SAPOrderInput)input).Id); Company company = this.Connect(new SapSettingsInput { Companydb = "SBO_KGT" /*tenant.SAPDatabase*/ }); IDocuments sapPurchaseOrder = (IDocuments)company.GetBusinessObject(BoObjectTypes.oPurchaseOrders); sapPurchaseOrder.DocType = BoDocumentTypes.dDocument_Items; sapPurchaseOrder.DocDate = DateTime.Now; //purchaseOrder.DocDate; sapPurchaseOrder.DocDueDate = DateTime.Now; sapPurchaseOrder.CardCode = "P000001"; //purchaseOrder.CardCode; sapPurchaseOrder.CardName = "VAN HEUSEN DE CENTRO AMERICA, S.de R.L. de C.V."; //purchaseOrder.CardName; //sapPurchaseOrder.DocTotal = Convert.ToDouble(purchaseOrder.DocTotal); sapPurchaseOrder.DocCurrency = purchaseOrder.DocCurrency; sapPurchaseOrder.Comments = purchaseOrder.Comments; sapPurchaseOrder.SalesPersonCode = purchaseOrder.SlpCode; //sapPurchaseOrder.Series = 0; //sapPurchaseOrder.NumAtCard = string.Empty; if (sapPurchaseOrder.UserFields.Fields.Count > 0) { sapPurchaseOrder.UserFields.Fields.Item("U_FacNom").Value = "VAN HEUSEN DE CENTRO AMERICA, S.de R.L. de C.V."; sapPurchaseOrder.UserFields.Fields.Item("U_Tipo_Facturacion").Value = "M"; sapPurchaseOrder.UserFields.Fields.Item("U_FacNit").Value = string.Empty; sapPurchaseOrder.UserFields.Fields.Item("U_FacFecha").Value = purchaseOrder.DocDate.ToShortDateString(); sapPurchaseOrder.UserFields.Fields.Item("U_TIPO_DOCUMENTO").Value = "FC"; sapPurchaseOrder.UserFields.Fields.Item("U_M2_UUID").Value = purchaseOrder.U_M2_UUID.ToString(); } foreach (var item in purchaseOrder.PurchaseOrderDetails) { sapPurchaseOrder.Lines.ItemCode = item.ItemCode; //sapPurchaseOrder.Lines.ItemDescription = item.Dscription; sapPurchaseOrder.Lines.Quantity = item.Quantity; sapPurchaseOrder.Lines.Price = Convert.ToDouble(item.Price); sapPurchaseOrder.Lines.Currency = item.LineCurrency; sapPurchaseOrder.Lines.TaxCode = item.TaxCode; //sapPurchaseOrder.Lines.LineTotal = Convert.ToDouble(item.LineTotal); //Settigs By Tenant //sapPurchaseOrder.Lines.CostingCode = "303"/*tenant.CostingCode*/; //sapPurchaseOrder.Lines.CostingCode2 = "3003-01"/*tenant.CostingCode2*/; //sapPurchaseOrder.Lines.CostingCode3 = string.Empty; //sapPurchaseOrder.Lines.AccountCode = string.Empty; sapPurchaseOrder.Lines.Add(); } /*foreach (var item in purchaseOrder.PurchaseOrderExpenses) * { * sapPurchaseOrder.Expenses.ExpenseCode = item.ExpnsCode; * sapPurchaseOrder.Expenses.TaxCode = item.TaxCode; * sapPurchaseOrder.Expenses.DistributionMethod = BoAdEpnsDistribMethods.aedm_None; * sapPurchaseOrder.Expenses.LineTotal = Convert.ToDouble(item.LineTotal); * //sapPurchaseOrder.Expenses.UserFields.Fields.Item("U_TipoA").Value = item.U_TipoA; * * sapPurchaseOrder.Expenses.Add(); * }*/ if (sapPurchaseOrder.Add() == 0) { message = $"Successfully added Purchase Order. DocEntry: {company.GetNewObjectKey()}"; purchaseOrder.Status = 2; purchaseOrder.RemoteId = Convert.ToInt32(company.GetNewObjectKey()); log.Info(message); } else { message = $"Error Code: {company.GetLastErrorCode().ToString()} - {company.GetLastErrorDescription()}"; purchaseOrder.Status = 3; response.Success = false; log.Error(message); } response.Message = message; purchaseOrder.LastMessage = message; await _purchaseOrderService.UpdateAsync(purchaseOrder); ////recomended from http://www.appseconnect.com/di-api-memory-leak-in-sap-business-one-9-0/ System.Runtime.InteropServices.Marshal.ReleaseComObject(purchaseOrder); purchaseOrder = null; company.Disconnect(); } catch (Exception e) { response.Success = false; response.Message = e.Message; log.Error(e.Message); } return(response); }
public override async Task <TaskResponse> Execute(ISapDocumentInput input) { log.Info($"Begin to create a order {((SAPOrderInput)input).Id}"); TaskResponse response = new TaskResponse() { Success = true, Message = "" }; String message = ""; try { var order = await _orderService.GetAsync(((SAPOrderInput)input).Id); var tenant = await _tenantRepository.GetTenantById(order.TenantId); //fix for M2 dimension var client = await _clientService.GetByCardCodeAsync(order.CardCode); string dimension = client == null ? string.Empty : string.IsNullOrWhiteSpace(client.Dimension) ? string.Empty : client.Dimension; Company company = this.Connect(new SapSettingsInput { Companydb = tenant.SAPDatabase }); IDocuments salesOrder = (IDocuments)company.GetBusinessObject(BoObjectTypes.oOrders); salesOrder.CardCode = order.CardCode; salesOrder.CardName = client == null ? string.Empty : string.IsNullOrWhiteSpace(client.Name) ? string.Empty : client.Name; salesOrder.Comments = order.Comment; salesOrder.Series = order.Series; salesOrder.SalesPersonCode = order.AbpUser.SalesPersonId; salesOrder.DocDueDate = order.CreationTime; if (salesOrder.UserFields.Fields.Count > 0) { salesOrder.UserFields.Fields.Item("U_FacNit").Value = client == null ? string.Empty : string.IsNullOrWhiteSpace(client.RTN) ? string.Empty : client.RTN; salesOrder.UserFields.Fields.Item("U_M2_UUID").Value = order.U_M2_UUID.ToString(); } foreach (var item in order.OrderItems.OrderBy(s => s.Code)) { salesOrder.Lines.ItemCode = item.Code; salesOrder.Lines.Quantity = item.Quantity; salesOrder.Lines.TaxCode = item.TaxCode; salesOrder.Lines.DiscountPercent = item.DiscountPercent; salesOrder.Lines.WarehouseCode = item.WarehouseCode; //settigs by tenant salesOrder.Lines.CostingCode = tenant.CostingCode; salesOrder.Lines.CostingCode2 = tenant.CostingCode2; salesOrder.Lines.CostingCode3 = dimension; salesOrder.Lines.Add(); } // add Sales Order if (salesOrder.Add() == 0) { message = String.Format("Successfully added Sales Order DocEntry: {0}", company.GetNewObjectKey()); order.Status = (int)OrderStatus.PreliminarEnSAP; log.Info(message); } else { message = "Error Code: " + company.GetLastErrorCode().ToString() + " - " + company.GetLastErrorDescription(); response.Success = false; response.Message = message; order.Status = (int)OrderStatus.ErrorAlCrearEnSAP; log.Error(message); } order.LastMessage = message; await _orderService.UpdateAsync(order); //recomended from http://www.appseconnect.com/di-api-memory-leak-in-sap-business-one-9-0/ System.Runtime.InteropServices.Marshal.ReleaseComObject(salesOrder); salesOrder = null; company.Disconnect(); }catch (Exception e) { response.Success = false; response.Message = e.Message; log.Error(e.Message); } return(response); }