private void LogSalesOrder(SalesOrderDocument document)
        {
            var url      = $"{Properties.Settings.Default.ServerAddress}/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 salesRep = GetSalesRepEntityReference(document.SalesRep);

            salesOrder.SalesRepresentativeReference = salesRep ?? throw new InvalidOperationException("No sales rep found for sales order");
        }
Exemple #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 static async Task UpsertDocumentTypeAsync(SalesOrderAggregate salesOrder)
        {
            SalesOrderDocument document = new SalesOrderDocument
            {
                Id                  = salesOrder.Id.ToString(),
                AccountNumber       = salesOrder.AccountNumber,
                Freight             = salesOrder.Freight,
                TimeToLive          = salesOrder.TimeToLive,
                OrderDate           = salesOrder.OrderDate,
                Items               = salesOrder.Items,
                PurchaseOrderNumber = salesOrder.PurchaseOrderNumber,
                ShippedDate         = salesOrder.ShippedDate,
                SubTotal            = salesOrder.SubTotal,
                TaxAmount           = salesOrder.TaxAmount,
                TotalDue            = salesOrder.TotalDue
            };

            Uri collectionUri = UriFactory.CreateDocumentCollectionUri(databaseName, collectionName);

            Console.WriteLine("\n1.1 - Creating documents");
            var response = await _client.UpsertDocumentAsync(collectionUri, document);

            Console.WriteLine($"Creating document type request charge {response.RequestCharge}");
        }
        private static async Task UseDocumentExtensions(string colSelfLink)
        {
            //Create an object that extends Document
            var salesOrderDocument = new SalesOrderDocument
            {
                Id = "DOCO1",
                PurchaseOrderNumber = "PO180091783420",
                OrderDate           = new DateTime(2013, 7, 17),
                AccountNumber       = "10-4020-000510",
                SubTotal            = 419.4589m,
                TaxAmt   = 12.5838m,
                Freight  = 472.3108m,
                TotalDue = 985.018m,
                Items    = new[]
                {
                    new SalesOrderDetail
                    {
                        OrderQty  = 1,
                        ProductId = 760,
                        UnitPrice = 419.4589m,
                        LineTotal = 419.4589m
                    }
                }
            };

            Document created = await client.CreateDocumentAsync(colSelfLink, salesOrderDocument);

            //Read document
            SalesOrderDocument readSalesOrderDocument = (SalesOrderDocument)(dynamic)(await client.ReadDocumentAsync(created.SelfLink)).Resource;

            //Update a property on the SalesOrderDocument
            readSalesOrderDocument.ShipDate = DateTime.UtcNow;

            //Persist the change to DocumentDB
            await client.ReplaceDocumentAsync(readSalesOrderDocument.SelfLink, readSalesOrderDocument);
        }
        private SalesOrder CreateNewSalesOrder(SalesOrderDocument document)
        {
            var customerDocument = GetCustomerFromErpNext(document.CustomerName);
            var salesOrder       = Company.Factories.SalesOrderFactory.Create();
            EntityReference <Customer> customerEntityReference = null;

            if (customerDocument != null && customerDocument.OldCustomerId != null)
            {
                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);
        }