private void LogSalesOrder(SalesOrderDocument document)
        {
            var url      = $"{Constants.ServerUrl}/api/resource/Sage 50 Export Log";
            var resource = new Resource(url);

            resource.LogSalesOrder(document);
        }
        private void AddSalesRep(SalesOrder salesOrder, SalesOrderDocument document)
        {
            if (document.SalesRep == null)
            {
                return;
            }
            var salesRepRef = GetEmployeeEntityReference(document.SalesRep);

            if (salesRepRef == null)
            {
                Logger.Debug("Employee {@name} was not found in Sage.", document.SalesRep);
                throw new InvalidOperationException("Employee should not be null in sales order");
            }
            salesOrder.SalesRepresentativeReference = (EntityReference <Employee>)salesRepRef;
        }
Пример #3
0
        public IRestResponse LogSalesOrder(SalesOrderDocument document)
        {
            var log = new Log
            {
                document_name = document.Name,
                export_date   = DateTime.Now.ToString("yyyy-MM-dd"),
                document_date = document.TransactionDate.ToString("yyyy-MM-dd"),
                document_type = "Sales Order"
            };
            var request = new RestRequest(Method.POST);

            request.AddJsonBody(log);
            var response = _restClient.Execute(request);

            return(response);
        }
        private SalesOrder CreateNewSalesOrder(SalesOrderDocument document)
        {
            var customerDocument        = GetCustomerFromErpNext(document.CustomerName, Logger);
            var salesOrder              = Company.Factories.SalesOrderFactory.Create();
            var customerEntityReference = GetCustomerEntityReference(customerDocument?.OldCustomerId);

            if (customerEntityReference == null)
            {
                Logger.Debug("Customer {@name} in {@Document} was not found in Sage.", document.Customer, document.Name);
                salesOrder = null;
                SetNext(new CreateCustomerHandler(Company, Logger));
                Logger.Debug("Customer {@name} has been queued for creation in Sage", document.Customer);
            }
            else if (salesOrder != null)
            {
                try
                {
                    salesOrder.CustomerReference           = customerEntityReference;
                    salesOrder.CustomerPurchaseOrderNumber = document.PoNo;
                    salesOrder.CustomerNote    = document.NotesOrSpecialInstructions;
                    salesOrder.Date            = document.TransactionDate;
                    salesOrder.DiscountAmount  = document.DiscountAmount;
                    salesOrder.DiscountDate    = document.TransactionDate;
                    salesOrder.ReferenceNumber = document.Name;
                    salesOrder.ShipByDate      = document.DeliveryDate < document.TransactionDate ? document.TransactionDate : document.DeliveryDate;
                    if (document.DeliveryDate <= document.TransactionDate)
                    {
                        Logger.Information("{@Name} has delivery date has been set to transaction date because delivery date is earlier than transaction date", document.Name);
                    }
                    salesOrder.ShipVia                     = document.ShippingMethod;
                    salesOrder.TermsDescription            = document.PaymentTermsTemplate;
                    salesOrder.CustomerPurchaseOrderNumber = document.PoNo;
                    AddSalesRep(salesOrder, document);
                    AddShipAddress(salesOrder);

                    foreach (var line in document.Items)
                    {
                        AddLine(salesOrder, line);
                    }

                    salesOrder.Save();
                    Logger.Information("Sales Order - {0} was saved successfully", document.Name);
                }
                catch (Sage.Peachtree.API.Exceptions.RecordInUseException)
                {
                    // abort. The unsaved data will eventually be re-queued
                    salesOrder = null;
                    Logger.Debug("Record is in use. {@Name} will be sent back to the queue", document.Name);
                }
                catch (ArgumentException e)
                {
                    salesOrder = null;
                    Logger.Debug("There was a problem with creating {@Name}. It will be sent back to the queue", document.Name);
                    Logger.Debug("There error is {@E}", e.Message);
                }
                catch (Sage.Peachtree.API.Exceptions.ValidationException e)
                {
                    Logger.Debug("Validation failed.");
                    Logger.Debug(e.Message);
                    if (e.ProblemList.OfType <DuplicateValueProblem>().Any(item => item.PropertyName == "ReferenceNumber"))
                    {
                        Logger.Debug("{@Name} is already in Sage so will notify ERPNext", document.Name);
                    }
                    else
                    {
                        Logger.Debug("{@Name} will be sent back to the queue", document.Name);
                        salesOrder = null;
                    }
                }
                catch (Exception e)
                {
                    salesOrder = null;
                    Logger.Debug(e, e.Message);
                    Logger.Debug("{@E}", e);
                }
            }
            return(salesOrder);
        }