public virtual Task <TaskResponse> Execute(ISapDocumentInput input)
 {
     throw new NotImplementedException();
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }