private void LoadSalesOrderFromName(string salesOrderReference, out SalesOrderList salesOrderLines)
        {
            salesOrderLines = Company.Factories.SalesOrderFactory.List();
            var filter       = LoadModifiers.Create();
            var property     = FilterExpression.Property("SalesOrder.ReferenceNumber");
            var value        = FilterExpression.StringConstant(salesOrderReference);
            var filterParams = FilterExpression.Contains(property, value);

            filter.Filters = filterParams;
            salesOrderLines.Load(filter);
        }
 public MainWindow()
 {
     this.WindowState = WindowState.Maximized;
     InitializeComponent();
     this._context.Customer.Load();
     this.customerList = new CustomerList(_context.Customer.Local);
     this._context.SalesOrderHeader.Load();
     this._context.Product.Load();
     this.salesOrderList  = new SalesOrderList(this, _context.SalesOrderHeader.Local, _context.Product.Local);
     this.content.Content = this.salesOrderList;
 }
Example #3
0
        public SalesOrderList Extract(string fileName, string outFile)
        {
            SalesOrderList salesOrderList = null;

            /*JsonSerializer serializer = new JsonSerializer();
             *
             * //FileStream outStream = new FileStream(outFile, FileMode.Create, FileAccess.Write);
             * using (MemoryStream outStream = new MemoryStream())
             * using (FileStream inStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
             * {
             *  // Read the decoder properties
             *  byte[] properties = new byte[5];
             *  if (inStream.Read(properties, 0, 5) != 5)
             *      throw (new Exception("input .lzma is too short"));
             *  PosProxyZip.Compression.LZMA.Decoder decoder = new PosProxyZip.Compression.LZMA.Decoder();
             *  decoder.SetDecoderProperties(properties);
             *  // Read in the decompress file size.
             *  long outSize = 0;
             *  for (int i = 0; i < 8; i++)
             *  {
             *      int v = inStream.ReadByte();
             *      if (v < 0)
             *          throw (new Exception("Can't Read 1"));
             *      outSize |= ((long)(byte)v) << (8 * i);
             *  }
             *  long compressedSize = inStream.Length - inStream.Position;
             *
             *  //decoder.Code(inStream, outStream, outSize, compressedSize, null);
             *  decoder.Code(inStream, outStream, -1, -1, null);
             *  //inStream.CopyTo(outStream);
             *
             *  using (StreamReader jsonData = new StreamReader(outStream, Encoding.ASCII))
             *  {
             *      salesOrderList = (SalesOrderList)serializer.Deserialize(jsonData, typeof(SalesOrderList));
             *  }
             * }
             * //outStream.Close();*/
            return(salesOrderList);
        }
Example #4
0
        public async Task <Stream> UploadSalesOrderAsync(MemoryStream memoryStream)
        {
            IDictionary <Stream, string> streams = new Dictionary <Stream, string>();

            using (ZipArchive archive = new ZipArchive(memoryStream))
            {
                var headerStream = archive.Entries.SingleOrDefault(x => x.FullName.Equals("sales_order_header.csv")).Open();
                var lineStream   = archive.Entries.SingleOrDefault(x => x.FullName.Equals("sales_order_lines.csv")).Open();
                streams.Add(headerStream, "sales_order_header.csv");
                streams.Add(lineStream, "sales_order_lines.csv");

                var headerRecords   = new List <SalesOrderHeader>();
                var lineItemRecords = new List <SalesOrderLine>();

                foreach (var stream in streams)
                {
                    using (var reader = new StreamReader(stream.Key))
                        using (var csv = new CsvReader(reader))
                        {
                            if (stream.Value.Equals("sales_order_header.csv"))
                            {
                                csv.Configuration.RegisterClassMap <SalesOrderHeaderMapping>();
                                headerRecords.AddRange(csv.GetRecords <SalesOrderHeader>());
                            }
                            else
                            {
                                csv.Configuration.RegisterClassMap <BulkSalesOrderLineMapping>();
                                lineItemRecords.AddRange(csv.GetRecords <SalesOrderLine>());
                            }
                        }
                }

                SalesOrderList salesOrders = new SalesOrderList();

                foreach (var header in headerRecords)
                {
                    //var provider = new CultureInfo("en-GB");
                    var startDate   = DateTime.ParseExact(header.StartDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                    var postingDate = DateTime.ParseExact(header.PostingDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                    var salesOrder = new SalesOrder();
                    salesOrder.ObjectNodeSenderTechnicalID = header.ExternalReference;
                    salesOrder.Name.Text          = header.Name;
                    salesOrder.DataOriginTypeCode = "4";
                    salesOrder.DeliveryTerms.DeliveryPriorityCode = GetDeliveryPriorityValue(header.DeliveryPriorityCode);
                    salesOrder.SalesAndServiceBusinessArea.DistributionChannelCode = GetDistributionChannelValue(header.DistributionChannelCode);
                    salesOrder.SalesUnitParty.PartyID            = header.SalesUnitPartyId;
                    salesOrder.BillToParty.PartyID               = header.BuyerPartyId;
                    salesOrder.AccountParty.PartyID              = header.BuyerPartyId;
                    salesOrder.PricingTerms.GrossAmountIndicator = "false";
                    salesOrder.RequestedFulfillmentPeriodPeriodTerms.StartDateTime.Text         = Convert.ToDateTime(startDate).ToString("s") + "Z";
                    salesOrder.RequestedFulfillmentPeriodPeriodTerms.StartDateTime.TimeZoneCode = "UTC+1";
                    salesOrder.PostingDate = Convert.ToDateTime(postingDate).ToString("s") + "Z";
                    salesOrder.EmployeeResponsibleParty.PartyID = header.EmployeeResponsible;
                    //salesOrder.RequestedFulfillmentPeriodPeriodTerms.EndDateTime.Text = endDate.ToString("yyyy-MM-dd");

                    var lineItems = lineItemRecords.FindAll(x => x.ExternalReference == header.ExternalReference);
                    foreach (var line in lineItems)
                    {
                        int lineItemId = 10;
                        var item       = new Models.SalesOrders.Item();
                        item.ID = lineItemId.ToString();
                        item.ProcessingTypeCode                 = "TAN";
                        item.ItemProduct.ProductID              = line.ProductId;
                        item.ItemScheduleLine.Quantity.Text     = line.Quantity;
                        item.ItemScheduleLine.Quantity.UnitCode = line.QuantityUnitCode;
                        item.PriceAndTaxCalculationItem.TaxationCharacteristicsCode.Text   = line.TaxCode;
                        item.PriceAndTaxCalculationItem.TaxationCharacteristicsCode.ListID = "1";
                        item.ShipFromItemLocation.LocationID.Text = line.ShipFromLocationId;

                        salesOrder.Items.Add(item);
                        lineItemId = lineItemId + 10;
                    }
                    salesOrders.SalesOrders.Add(salesOrder);
                }

                //var soJson = HelperExtensions.SerializeObject(salesOrders.SalesOrders);
                var salesOrderXml = HelperExtensions.SerializeToXml(salesOrders);

                //read createxml file
                string filePath = Path.Combine(HostingEnvironment.ContentRootPath, "xmlfiles/salesOrder.xml");

                //merge xml files
                XmlDocument doc = new XmlDocument();
                doc.Load(filePath);
                var nsmgr = new XmlNamespaceManager(doc.NameTable);
                nsmgr.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
                nsmgr.AddNamespace("glob", "http://sap.com/xi/SAPGlobal20/Global");

                var element = doc.SelectSingleNode("/soapenv:Envelope/soapenv:Body/glob:SalesOrderBundleMaintainRequest_sync", nsmgr);

                if (element != null)
                {
                    var subDoc = new XmlDocument();
                    subDoc.LoadXml(salesOrderXml);
                    var nsmgr1 = new XmlNamespaceManager(subDoc.NameTable);
                    nsmgr1.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema");
                    nsmgr1.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
                    var salesOrderListNodes = subDoc.SelectNodes("//SalesOrderList/SalesOrder", nsmgr1);
                    var sb = new StringBuilder();
                    foreach (XmlNode child in salesOrderListNodes)
                    {
                        sb.AppendLine("<SalesOrder>");
                        sb.AppendLine(child.InnerXml);
                        sb.AppendLine("</SalesOrder>");
                    }
                    var res = sb.ToString();
                    element.InnerXml = sb.ToString();

                    var     basicMsgNode   = doc.CreateNode(XmlNodeType.Element, "BasicMessageHeader", null);
                    XmlNode salesOrderNode = doc.SelectSingleNode("//SalesOrder");
                    element.InsertBefore(basicMsgNode, salesOrderNode);
                    doc.Save(filePath);

                    StreamReader sr      = new StreamReader(filePath);
                    string       soapXml = sr.ReadToEnd();
                    sr.Close();

                    var tenantSetting = await _tenantSettingService.GetSetting();

                    UriBuilder urlBuilder = new UriBuilder(tenantSetting.BaseUrl)
                    {
                        Path = "/sap/bc/srt/scs/sap/managesalesorderin5"
                    };
                    var request = new HttpRequestMessage(HttpMethod.Post, urlBuilder.ToString());
                    request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/xml"));
                    var byteArray = Encoding.ASCII.GetBytes($"{tenantSetting.User}:{tenantSetting.Password}");
                    request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
                    request.Content = new StringContent(soapXml, Encoding.UTF8, "text/xml");
                    var response = await _client.HttpClient.SendAsync(request);

                    if (response.IsSuccessStatusCode)
                    {
                        var responseData = await response.Content.ReadAsStreamAsync();

                        return(responseData);
                    }
                }
            }

            return(null);
        }
Example #5
0
        public async Task <Tuple <int, Stream> > UploadSingleSalesOrderAsync(MemoryStream memoryStream)
        {
            using (var reader = new StreamReader(memoryStream))
                using (var csv = new CsvReader(reader))
                {
                    csv.Configuration.IgnoreBlankLines = false;
                    csv.Configuration.RegisterClassMap <SalesOrderHeaderMapping>();
                    csv.Configuration.RegisterClassMap <SalesOrderLineMapping>();

                    var headerRecords   = new List <SalesOrderHeader>();
                    var lineItemRecords = new List <SalesOrderLine>();

                    var isHeader = true;
                    while (csv.Read())
                    {
                        if (isHeader)
                        {
                            csv.ReadHeader();
                            isHeader = false;
                            continue;
                        }

                        if (string.IsNullOrEmpty(csv.GetField(0)))
                        {
                            isHeader = true;
                            continue;
                        }

                        switch (csv.Context.HeaderRecord[0])
                        {
                        case "ExternalReference":
                            headerRecords.Add(csv.GetRecord <SalesOrderHeader>());
                            break;

                        case "ProductId":
                            lineItemRecords.Add(csv.GetRecord <SalesOrderLine>());
                            break;

                        default:
                            throw new InvalidOperationException("Unknown record type.");
                        }
                    }

                    SalesOrderList salesOrders = new SalesOrderList();

                    foreach (var header in headerRecords)
                    {
                        //var provider = new CultureInfo("en-GB");
                        var startDate = DateTime.ParseExact(header.StartDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                        var endDate   = DateTime.ParseExact(header.EndDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                        var salesOrder = new SalesOrder();
                        salesOrder.ObjectNodeSenderTechnicalID = header.ExternalReference;
                        salesOrder.Name.Text          = header.Name;
                        salesOrder.DataOriginTypeCode = header.DataOriginTypeCode;
                        salesOrder.DeliveryTerms.DeliveryPriorityCode = header.DeliveryPriorityCode;
                        salesOrder.SalesUnitParty.PartyID             = header.SalesUnitPartyId;
                        salesOrder.BillToParty.PartyID = header.BuyerPartyId;
                        salesOrder.PricingTerms.GrossAmountIndicator = "false";
                        salesOrder.RequestedFulfillmentPeriodPeriodTerms.StartDateTime.Text = startDate.ToString("yyyy-MM-dd");
                        salesOrder.RequestedFulfillmentPeriodPeriodTerms.EndDateTime.Text   = endDate.ToString("yyyy-MM-dd");

                        var lineItems = lineItemRecords.FindAll(x => x.ExternalReference == header.ExternalReference);
                        foreach (var line in lineItems)
                        {
                            int lineItemId = 10;
                            var item       = new Models.SalesOrders.Item();
                            item.ID = lineItemId.ToString();
                            item.ProcessingTypeCode                 = line.ProcessingTypeCode;
                            item.ItemProduct.ProductID              = line.ProductId;
                            item.ItemScheduleLine.Quantity.Text     = line.Quantity;
                            item.ItemScheduleLine.Quantity.UnitCode = line.QuantityUnitCode;

                            salesOrder.Items.Add(item);
                            lineItemId += 10;
                        }
                        salesOrders.SalesOrders.Add(salesOrder);
                    }

                    //var soJson = HelperExtensions.SerializeObject(salesOrders.SalesOrders);
                    var salesOrderXml = HelperExtensions.SerializeToXml(salesOrders);

                    //read createxml file
                    string filePath = Path.Combine(HostingEnvironment.ContentRootPath, "xmlfiles/salesOrder.xml");

                    //merge xml files
                    XmlDocument doc = new XmlDocument();
                    doc.Load(filePath);
                    var nsmgr = new XmlNamespaceManager(doc.NameTable);
                    nsmgr.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
                    nsmgr.AddNamespace("glob", "http://sap.com/xi/SAPGlobal20/Global");

                    var element = doc.SelectSingleNode("/soapenv:Envelope/soapenv:Body/glob:SalesOrderBundleMaintainRequest_sync", nsmgr);

                    if (element != null)
                    {
                        var subDoc = new XmlDocument();
                        subDoc.LoadXml(salesOrderXml);
                        var nsmgr1 = new XmlNamespaceManager(subDoc.NameTable);
                        nsmgr1.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema");
                        nsmgr1.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
                        var salesOrderListNodes = subDoc.SelectNodes("//SalesOrderList/SalesOrder", nsmgr1);
                        var sb = new StringBuilder();
                        foreach (XmlNode child in salesOrderListNodes)
                        {
                            sb.AppendLine("<SalesOrder>");
                            sb.AppendLine(child.InnerXml);
                            sb.AppendLine("</SalesOrder>");
                        }
                        var res = sb.ToString();
                        element.InnerXml = sb.ToString();

                        var     basicMsgNode   = doc.CreateNode(XmlNodeType.Element, "BasicMessageHeader", null);
                        XmlNode salesOrderNode = doc.SelectSingleNode("//SalesOrder");
                        element.InsertBefore(basicMsgNode, salesOrderNode);
                        doc.Save(filePath);

                        StreamReader sr      = new StreamReader(filePath);
                        string       soapXml = sr.ReadToEnd();
                        sr.Close();

                        var tenantSetting = await _tenantSettingService.GetSetting();

                        UriBuilder urlBuilder = new UriBuilder(tenantSetting.BaseUrl)
                        {
                            Path = "/sap/bc/srt/scs/sap/managesalesorderin5"
                        };
                        var request = new HttpRequestMessage(HttpMethod.Post, urlBuilder.ToString());
                        request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/xml"));
                        var byteArray = Encoding.ASCII.GetBytes($"{tenantSetting.User}:{tenantSetting.Password}");
                        request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
                        request.Content = new StringContent(soapXml, Encoding.UTF8, "text/xml");
                        var response = await _client.HttpClient.SendAsync(request);

                        if (response.IsSuccessStatusCode)
                        {
                            var responseData = await response.Content.ReadAsStreamAsync();

                            return(Tuple.Create((int)response.StatusCode, responseData));
                        }

                        var errorResponse = await response.Content.ReadAsStreamAsync();

                        return(Tuple.Create((int)response.StatusCode, errorResponse));
                    }
                }

            return(null);
        }
Example #6
0
 protected override void InitObjects(bool createNew)
 {
     listObj     = list = GetList <SalesOrderList>(createNew);
     criteriaObj = criteria = GetCriteria <SalesOrderCriteriaCustomized>(createNew);
 }