Ejemplo n.º 1
0
		public void MultpleRecordsWriteAsync()
		{
			engine = new MultiRecordEngine(new RecordTypeSelector(CustomSelector), typeof(OrdersVerticalBar), typeof(CustomersSemiColon), typeof(SampleType));

			object[] records = engine.ReadFile(Common.TestPath(@"Good\MultiRecord1.txt"));

			engine.BeginWriteFile("tempoMulti.txt");
			foreach (object o in records)
			{
				engine.WriteNext(o);
			}
			engine.Close();
			File.Delete("tempoMulti.txt");


			object[] res = engine.ReadFile(Common.TestPath(@"Good\MultiRecord1.txt"));

			Assert.AreEqual(12, res.Length);
			Assert.AreEqual(12, engine.TotalRecords);

			Assert.AreEqual(typeof(OrdersVerticalBar), res[0].GetType());
			Assert.AreEqual(typeof(OrdersVerticalBar), res[1].GetType());
			Assert.AreEqual(typeof(CustomersSemiColon), res[2].GetType());
			Assert.AreEqual(typeof(SampleType), res[5].GetType());
		}
Ejemplo n.º 2
0
		static Type CustomSelector(MultiRecordEngine engine, string record)
		{
			if (Char.IsLetter(record[0]))
				return typeof(CustomersSemiColon);
			else
				return typeof(OrdersVerticalBar);
		}
Ejemplo n.º 3
0
 private static Type CustomRecordSelector(MultiRecordEngine engine, string line)
 {
     line = line.ToLower();
     if (line.StartsWith("carrier"))
     {
         return typeof(RawCarrier);
     }
     if (line.StartsWith("origin"))
     {
         return typeof(RawOrigin);
     }
     if (line.StartsWith("destination"))
     {
         return typeof(RawDestination);
     }
     if (line.StartsWith("shipment|"))
     {
         return typeof(RawShipment);
     }
     if (line.StartsWith("shipmentdetail|"))
     {
         return typeof(RawShipmentDetail);
     }
     return null;
 }
Ejemplo n.º 4
0
		static void Main(string[] args)
		{
			MultiRecordEngine engine;
			engine = new MultiRecordEngine(typeof(OrdersVerticalBar), typeof(CustomersSemiColon)); 
			engine.RecordSelector = new RecordTypeSelector(CustomSelector);
			object[] res = engine.ReadFile(@"C:\Documents and Settings\l0737860\Mis documentos\Multi.txt"); 
		}
Ejemplo n.º 5
0
		public void MultpleRecordsFileAsyncBad()
		{
			engine = new MultiRecordEngine(typeof(OrdersVerticalBar), typeof(CustomersSemiColon), typeof(SampleType));
			engine.RecordSelector = new RecordTypeSelector(CustomSelector);

			foreach (object o in engine)
			{
				o.ToString();
			}
		}
Ejemplo n.º 6
0
        //-> /File
        //-> File:Selector.cs
        /// <summary>
        /// This is the selector that determines the record type based on
        /// whatever criteria you write
        /// </summary>
        /// <param name="engine">Engine that is processing file</param>
        /// <param name="record">Record read from input</param>
        /// <returns>Record to accept this record</returns>
        Type CustomSelector(MultiRecordEngine engine, string record)
        {
            if (record.Length == 0)
                return null;

            if (Char.IsLetter(record[0]))
                return typeof(Customer);
            else if (record.Length == 14)
                return typeof(SampleType);
            else
                return typeof(Orders);
        }
Ejemplo n.º 7
0
        public void MultpleRecordsFile()
        {
            engine = new MultiRecordEngine(new RecordTypeSelector(CustomSelector), typeof(OrdersVerticalBar), typeof(CustomersSemiColon), typeof(SampleType));

            object[] res = engine.ReadFile(FileTest.Good.MultiRecord1.Path);

            Assert.AreEqual(12, res.Length);
            Assert.AreEqual(12, engine.TotalRecords);

            Assert.AreEqual(typeof(OrdersVerticalBar), res[0].GetType());
            Assert.AreEqual(typeof(OrdersVerticalBar), res[1].GetType());
            Assert.AreEqual(typeof(CustomersSemiColon), res[2].GetType());
            Assert.AreEqual(typeof(SampleType), res[5].GetType());
        }
Ejemplo n.º 8
0
        public void MultpleRecordsFileAsyncBad()
        {
            engine = new MultiRecordEngine(typeof (OrdersVerticalBar), typeof (CustomersSemiColon), typeof (SampleType));
            engine.RecordSelector = new RecordTypeSelector(CustomSelector);

            Assert.Throws<FileHelpersException>(
                () =>
                    {
                        foreach (var o in engine)
                        {
                            o.ToString();
                        }
                    });
        }
Ejemplo n.º 9
0
        //-> File:Input.txt
        /*10248|VINET|5|04071996|01081996|16071996|3|32.38
        10249|TOMSP|6|05071996|16081996|10071996|1|11.61
        ALFKI;Alfreds Futterkiste;Maria Anders;Sales Representative;Obere Str. 57;Berlin;Germany
        ANATR;Ana Trujillo Emparedados y helados;Ana Trujillo;Owner;Avda. de la Constitución 2222;México D.F.;Mexico
        10250|HANAR|4|08071996|05081996|12071996|2|65.83
        10111314012345
        11101314123456
        10251|VICTE|3|08071996|05081996|15071996|1|41.34
        11121314901234
        10101314234567
        ANTON;Antonio Moreno Taquería;Antonio Moreno;Owner;Mataderos  2312;México D.F.;Mexico
        BERGS;Berglunds snabbköp;Christina Berglund;Order Administrator;Berguvsvägen  8;Luleå;Sweden
        */
        //-> /File
        //-> File:RunEngine.cs
        /// <summary>
        /// The idea of this engine is to parse files with different record types
        /// (this engine doesn't use any hierarical structure like the
        /// master-details, all the records are in linear relation for it).
        /// With the MultiRecordEngine you can parse also mixed delimited and
        /// fixed length records.
        /// </summary>
        public override void Run()
        {
            MultiRecordEngine engine;

            engine = new MultiRecordEngine(typeof(Orders),
                                            typeof(Customer),
                                            typeof(SampleType));
            engine.RecordSelector = new RecordTypeSelector(CustomSelector);

            object[] res = engine.ReadFile("Input.txt");

            foreach (var rec in res)
                this.Console.WriteLine(res.ToString());
        }
Ejemplo n.º 10
0
        public void MultpleRecordsAdvanced()
        {
            var myParserEngine = new MultiRecordEngine(typeof(RawCarrier), typeof(RawOrigin), typeof(RawDestination), typeof(RawShipment), typeof(RawShipmentDetail))
            { RecordSelector = CustomRecordSelector };
            var testString = @"Carrier|123123|117233|DA|||
Origin|61|8120|Manufacturing A |Field Road||DALLAS|TX|9|US
Destination|LO|0222|||ADINC| TURNPIKE||NT|NY|11003|US|56
Shipment|M00||       9.00|Inches|       4.00|Inches|       7.00|Inches|2.000|lb|08/01/2010|15:43|U20|U0||90|1|          2|0001|||
ShipmentDetail|LM000|805289078029|ORIGINAL|FR||NR|              2.000|0067|2001";

            var result = myParserEngine.ReadString(testString);

            Check.That(result.Length).IsEqualTo(5);

        }
Ejemplo n.º 11
0
        private void LoadDataButton_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "CINLIST|CINLIST";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                dataFile = openFileDialog1.FileName;

                try
                {
                    CopyrightRecordType =
                        FixedLengthClassBuilder.ClassFromXmlFile("CinListCopyrightRecord.xml");
                    DetailRecordType =
                        FixedLengthClassBuilder.ClassFromXmlFile("CinListDetailRecord.xml");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(
                        ex.Message,
                        "Error loading RunTime Record Classes",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error);
                    dataFile = null;
                    return;
                }

                try
                {
                    engine = new MultiRecordEngine(
                                new RecordTypeSelector(mySelector),
                                CopyrightRecordType,
                                DetailRecordType);

                    engine.BeginReadFile(dataFile);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(
                        ex.Message,
                        "Error loading data file",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error);
                    dataFile = null;
                    return;
                }
            }
            ToggleProcessButton();
        }
Ejemplo n.º 12
0
        //-> /File
        //-> To work with this engine you must create one instance of it in this way:
        public override void Run()
        {
            //-> File:RunEngine.cs

            var engine = new MultiRecordEngine(typeof (Orders),
                typeof (Customer),
                typeof (SampleType));

            engine.RecordSelector = new RecordTypeSelector(CustomSelector);

            var res = engine.ReadFile("Input.txt");

            foreach (var rec in res)
                Console.WriteLine(rec.ToString());

            //-> /File
        }
Ejemplo n.º 13
0
        public void MultpleRecordsFileAsync()
        {
            engine = new MultiRecordEngine(new RecordTypeSelector(CustomSelector), typeof(OrdersVerticalBar), typeof(CustomersSemiColon), typeof(SampleType));

            var res = new ArrayList();
            engine.BeginReadFile(FileTest.Good.MultiRecord1.Path);
            foreach (var o in engine)
            {
                res.Add(o);
            }

            Assert.AreEqual(12, res.Count);
            Assert.AreEqual(12, engine.TotalRecords);

            Assert.AreEqual(typeof(OrdersVerticalBar), res[0].GetType());
            Assert.AreEqual(typeof(OrdersVerticalBar), res[1].GetType());
            Assert.AreEqual(typeof(CustomersSemiColon), res[2].GetType());
            Assert.AreEqual(typeof(SampleType), res[5].GetType());
        }
Ejemplo n.º 14
0
        public void MultpleRecordsFileAsync()
        {
            engine = new MultiRecordEngine(new RecordTypeSelector(CustomSelector),
                                           typeof(OrdersVerticalBar),
                                           typeof(CustomersSemiColon),
                                           typeof(SampleType));

            var res = new ArrayList();

            engine.BeginReadFile(FileTest.Good.MultiRecord1.Path);
            foreach (var o in engine)
            {
                res.Add(o);
            }

            Assert.AreEqual(12, res.Count);
            Assert.AreEqual(12, engine.TotalRecords);

            Assert.AreEqual(typeof(OrdersVerticalBar), res[0].GetType());
            Assert.AreEqual(typeof(OrdersVerticalBar), res[1].GetType());
            Assert.AreEqual(typeof(CustomersSemiColon), res[2].GetType());
            Assert.AreEqual(typeof(SampleType), res[5].GetType());
        }
Ejemplo n.º 15
0
        private Type ABAFormatSelector(MultiRecordEngine engine, string recordLine)
        {
            if (recordLine.Length == 0)
            {
                return(null);
            }

            var type = Convert.ToInt32(recordLine[0]) - 48; // ascii 48 = '0'

            if (type == 0)
            {
                return(typeof(DescriptiveRecord));
            }
            else if (type == 1)
            {
                return(typeof(DetailRecord));
            }
            else if (type == 7)
            {
                return(typeof(FileTotalRecord));
            }
            return(null);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Read an external currency exchange file using MultiRecordEngine
        /// </summary>
        /// <param name="FullFilePath"></param>
        /// <returns>An single dimentional array with all the rows in the file</returns>
        public object[] ReadExternalCurrencyExchageFile(string FullFilePath)
        {
            try
            {
                FileInfo finfo = new FileInfo(FullFilePath);

                if (finfo.Length == 0)
                {
                    throw new Exception($"The file <{FullFilePath}> is empty");
                }

                using (FileStream fs = new FileStream(FullFilePath, FileMode.Open, FileAccess.Read))
                {
                    var engine = new MultiRecordEngine(typeof(CurrencyToConvert), typeof(CurrencyRate));

                    engine.RecordSelector = new RecordTypeSelector(CustomSelector);

                    return(engine.ReadFile(FullFilePath));
                }
            }
            catch (FileNotFoundException e)
            {
                throw new FileNotFoundException($"The file <{FullFilePath}> was not found: '{e.Message}'");
            }
            catch (DirectoryNotFoundException e)
            {
                throw new DirectoryNotFoundException($"The directory was not found: '{e.Message}'");
            }
            catch (IOException e)
            {
                throw new IOException($"The file <{FullFilePath}> could not be opened: '{e.Message}'");
            }
            catch (Exception e)
            {
                throw new Exception($"An error in method ReadExternalCurrencyExchageFile : '{e.Message}'");
            }
        }
        /// <summary>
        /// Method to import file with the help of multi record engine
        /// </summary>
        /// <param name="filePath">path where file is located</param>
        /// <returns>list of data records in the file</returns>
        public List <DataRecord> EvaluateFileContents(string filePath)
        {
            List <DataRecord> results          = new List <DataRecord>();
            MultiRecordEngine file72ByteEngine = new MultiRecordEngine(typeof(DataRecord),
                                                                       typeof(ColumHeaderRecord),
                                                                       typeof(IgnoreRowRecord))
            {
                RecordSelector = new RecordTypeSelector(CustomSelector),
                ErrorMode      = ErrorMode.ThrowException
            };

            var res = file72ByteEngine.ReadFile(filePath);

            foreach (var rec in res)
            {
                if (rec.GetType() == typeof(DataRecord))
                {
                    results.Add((DataRecord)rec);
                }
                else if (rec.GetType() == typeof(ColumHeaderRecord))
                {
                    var columnRecord = (ColumHeaderRecord)rec;
                    if (!(ColumnHeader1.Equals(columnRecord.TeamName.ToLower(), StringComparison.OrdinalIgnoreCase) &&
                          ColumnHeader2.Equals(columnRecord.P.ToLower(), StringComparison.OrdinalIgnoreCase) &&
                          ColumnHeader3.Equals(columnRecord.W.ToLower(), StringComparison.OrdinalIgnoreCase) &&
                          ColumnHeader4.Equals(columnRecord.L.ToLower(), StringComparison.OrdinalIgnoreCase) &&
                          ColumnHeader5.Equals(columnRecord.D.ToLower(), StringComparison.OrdinalIgnoreCase) &&
                          ColumnHeader6.Equals(columnRecord.F.ToLower(), StringComparison.OrdinalIgnoreCase) &&
                          ColumnHeader7.Equals(columnRecord.A.ToLower(), StringComparison.OrdinalIgnoreCase) &&
                          ColumnHeader8.Equals(columnRecord.Pts.ToLower(), StringComparison.OrdinalIgnoreCase)))
                    {
                        throw new FormatException(ErrorMessageInvalidColumns);
                    }
                }
            }
            return(results);
        }
Ejemplo n.º 18
0
        public void readCSV(string fileName, string info)
        {
            var engine = new MultiRecordEngine(typeof(IP02_Boelo_CashIO),
                                               typeof(IP02_Boelo_CheckIO),
                                               typeof(IP02_Boelo_DepositIO));

            engine.RecordSelector = new RecordTypeSelector(CustomSelector.CustomSelector);

            try
            {
                Console.WriteLine("File Opened");

                //var res = engine.(fileName);

                ///// to Write use:
                //engine.WriteFile(fileName, res);
                //MessageBox.Show(res.ToString());
                //foreach (var rec in res)
                //{
                //    Console.WriteLine(rec.ToString());

                //    MessageBox.Show(rec.ToString());
                //}


                using (StreamWriter test = File.AppendText(fileName))
                {
                    test.WriteLine(info.ToString());
                }
            }
            catch (FileNotFoundException ex)
            {
                //write error
                Console.WriteLine(ex);
            }
        }
Ejemplo n.º 19
0
        private static Type CustomSelector(MultiRecordEngine engine, string recordString)
        {
            if (recordString.Length == 0)
            {
                return(null);
            }

            if (recordString.StartsWith(Constantes.TypeVendedor))
            {
                return(typeof(VendedorViewModel));
            }
            else if (recordString.StartsWith(Constantes.TypeCliente))
            {
                return(typeof(ClienteViewModel));
            }
            else if (recordString.StartsWith(Constantes.TypeVenda))
            {
                return(typeof(VendaViewModel));
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 20
0
		public void MultpleRecordsFileRW()
		{
			engine = new MultiRecordEngine(typeof(OrdersVerticalBar), typeof(CustomersSemiColon), typeof(SampleType));
			engine.RecordSelector = new RecordTypeSelector(CustomSelector);

			object[] res2 = engine.ReadFile(Common.TestPath(@"Good\MultiRecord1.txt"));

			Assert.AreEqual(12, res2.Length);
			Assert.AreEqual(12, engine.TotalRecords);

			engine.WriteFile("tempMR.txt", res2);
			object[] res = engine.ReadFile("tempMR.txt");
			File.Delete("tempMR.txt");

			Assert.AreEqual(12, res.Length);
			Assert.AreEqual(12, engine.TotalRecords);

			Assert.AreEqual(typeof(OrdersVerticalBar), res[0].GetType());
			Assert.AreEqual(typeof(OrdersVerticalBar), res[1].GetType());
			Assert.AreEqual(typeof(CustomersSemiColon), res[2].GetType());
			Assert.AreEqual(typeof(SampleType), res[5].GetType());
		}
Ejemplo n.º 21
0
        public bool WriteFileAddingSequence(string filename, Models.Files.PurchaseOrder.DataSequence.V3 data, bool checkseq)
        {
            List <object> writelist = new List <object>();
            List <(string code, Type type)> used = new List <(string code, Type type)>();
            bool  success = false;
            short seqnum  = 1;

            try
            {
                //build list

                data.FileHeaderRecord.SequenceNumber = seqnum++;
                writelist.Add(data.FileHeaderRecord);
                if ((from u in used where u.code == data.FileHeaderRecord.RecordCode select u.code).Count() == 0)
                {
                    used.Add((data.FileHeaderRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R00_ClientFileHeader)));
                }
                if (data.PurchaseOrders != null && data.PurchaseOrders.Count > 0)
                {
                    foreach (Models.Files.PurchaseOrder.DataSequence.PurchaseOrder item in data.PurchaseOrders)
                    {
                        item.ClientHeaderRecord.SequenceNumber = seqnum++;
                        writelist.Add(item.ClientHeaderRecord);
                        if ((from u in used where u.code == item.ClientHeaderRecord.RecordCode select u.code).Count() == 0)
                        {
                            used.Add((item.ClientHeaderRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R10_ClientHeader)));
                        }
                        if (Common.IsValid(item.FixedHandlingInstructionsRecord, checkseq) && !string.IsNullOrEmpty(item.FixedHandlingInstructionsRecord.PONumber))
                        {
                            item.FixedHandlingInstructionsRecord.SequenceNumber = seqnum++;
                            writelist.Add(item.FixedHandlingInstructionsRecord);
                            if ((from u in used where u.code == item.FixedHandlingInstructionsRecord.RecordCode select u.code).Count() == 0)
                            {
                                used.Add((item.FixedHandlingInstructionsRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions)));
                            }
                        }
                        if (Common.IsValid(item.PurchaseOrderOptionsRecord, checkseq))
                        {
                            item.PurchaseOrderOptionsRecord.SequenceNumber = seqnum++;
                            writelist.Add(item.PurchaseOrderOptionsRecord);
                            if ((from u in used where u.code == item.PurchaseOrderOptionsRecord.RecordCode select u.code).Count() == 0)
                            {
                                used.Add((item.PurchaseOrderOptionsRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R21_PurchaseOrderOptions)));
                            }
                        }
                        if (item.PurchaseOrderDetails != null && item.PurchaseOrderDetails.Count > 0)
                        {
                            foreach (Models.Files.PurchaseOrder.DataSequence.PurchaseOrderDetail detail in item.PurchaseOrderDetails)
                            {
                                if (Common.IsValid(detail.LineItemDetail, checkseq))
                                {
                                    detail.LineItemDetail.SequenceNumber = seqnum++;
                                    writelist.Add(detail.LineItemDetail);
                                    if ((from u in used where u.code == detail.LineItemDetail.RecordCode select u.code).Count() == 0)
                                    {
                                        used.Add((detail.LineItemDetail.RecordCode, typeof(Models.Files.PurchaseOrder.R40_LineItemDetail)));
                                    }
                                }
                                if (Common.IsValid(detail.AdditionalLineItemDetail, checkseq))
                                {
                                    detail.AdditionalLineItemDetail.SequenceNumber = seqnum++;
                                    writelist.Add(detail.AdditionalLineItemDetail);
                                    if ((from u in used where u.code == detail.AdditionalLineItemDetail.RecordCode select u.code).Count() == 0)
                                    {
                                        used.Add((detail.AdditionalLineItemDetail.RecordCode, typeof(Models.Files.PurchaseOrder.R41_AdditionalLineItemDetail)));
                                    }
                                }
                                if (detail.Imprint != null && detail.Imprint.Count > 0)
                                {
                                    foreach (Models.Files.PurchaseOrder.R45_Imprint imprint in detail.Imprint)
                                    {
                                        if (Common.IsValid(imprint, checkseq) && !string.IsNullOrEmpty(imprint.PONumber))
                                        {
                                            imprint.SequenceNumber = seqnum++;
                                            writelist.Add(imprint);
                                            if ((from u in used where u.code == imprint.RecordCode select u.code).Count() == 0)
                                            {
                                                used.Add((imprint.RecordCode, typeof(Models.Files.PurchaseOrder.R45_Imprint)));
                                            }
                                        }
                                    }
                                }
                                if (Common.IsValid(detail.StickerBarcodeDataRecord, checkseq) && !string.IsNullOrEmpty(detail.StickerBarcodeDataRecord.PONumber))
                                {
                                    detail.StickerBarcodeDataRecord.SequenceNumber = seqnum++;
                                    writelist.Add(detail.StickerBarcodeDataRecord);
                                    if ((from u in used where u.code == detail.StickerBarcodeDataRecord.RecordCode select u.code).Count() == 0)
                                    {
                                        used.Add((detail.StickerBarcodeDataRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R46_StickerBarcodeData)));
                                    }
                                }
                                if (detail.StickerTextLines != null && detail.StickerTextLines.Count > 0)
                                {
                                    foreach (Models.Files.PurchaseOrder.R46_StickerTextLines text in detail.StickerTextLines)
                                    {
                                        if (Common.IsValid(text, checkseq) && !string.IsNullOrEmpty(text.PONumber))
                                        {
                                            text.SequenceNumber = seqnum++;
                                            writelist.Add(text);
                                            if ((from u in used where u.code == text.RecordCode select u.code).Count() == 0)
                                            {
                                                used.Add((text.RecordCode, typeof(Models.Files.PurchaseOrder.R46_StickerBarcodeData)));
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (Common.IsValid(data.PurchaseOrderTrailerRecord, checkseq))
                {
                    data.PurchaseOrderTrailerRecord.SequenceNumber = seqnum++;
                    writelist.Add(data.PurchaseOrderTrailerRecord);
                    if ((from u in used where u.code == data.PurchaseOrderTrailerRecord.RecordCode select u.code).Count() == 0)
                    {
                        used.Add((data.PurchaseOrderTrailerRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R50_PurchaseOrderTrailer)));
                    }
                }
                if (Common.IsValid(data.FileTrailerRecord, checkseq))
                {
                    data.FileTrailerRecord.SequenceNumber = seqnum++;
                    writelist.Add(data.FileTrailerRecord);
                    if ((from u in used where u.code == data.FileTrailerRecord.RecordCode select u.code).Count() == 0)
                    {
                        used.Add((data.FileTrailerRecord.RecordCode, typeof(Models.Files.PurchaseOrder.R90_FileTrailer)));
                    }
                }
                MultiRecordEngine engine = new MultiRecordEngine
                                           (
                    (from u in used
                     orderby u.code
                     select u.type).Distinct().ToArray()
                                           )
                {
                    RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom)
                };
                engine.WriteFile(filename, writelist.ToArray());
                success = true;
            }
            catch (Exception ex)
            {
                log.Error(ex);
                success = false;
            }
            return(success);
        }
Ejemplo n.º 22
0
        public bool WriteFile(string filename, Models.Files.PurchaseOrder.DataSequence.V3 data, bool checkseq)
        {
            List <object> writelist = new List <object>();
            bool          success   = false;

            try
            {
                //build list
                writelist.Add(data.FileHeaderRecord);
                if (data.PurchaseOrders != null && data.PurchaseOrders.Count > 0)
                {
                    foreach (Models.Files.PurchaseOrder.DataSequence.PurchaseOrder item in data.PurchaseOrders)
                    {
                        writelist.Add(item.ClientHeaderRecord);
                        if (Common.IsValid(item.FixedHandlingInstructionsRecord, checkseq))
                        {
                            writelist.Add(item.FixedHandlingInstructionsRecord);
                        }
                        if (Common.IsValid(item.PurchaseOrderOptionsRecord, checkseq))
                        {
                            writelist.Add(item.PurchaseOrderOptionsRecord);
                        }
                        if (item.PurchaseOrderDetails != null && item.PurchaseOrderDetails.Count > 0)
                        {
                            foreach (Models.Files.PurchaseOrder.DataSequence.PurchaseOrderDetail detail in item.PurchaseOrderDetails)
                            {
                                if (Common.IsValid(detail.LineItemDetail, checkseq))
                                {
                                    writelist.Add(detail.LineItemDetail);
                                }
                                if (Common.IsValid(detail.AdditionalLineItemDetail, checkseq))
                                {
                                    writelist.Add(detail.AdditionalLineItemDetail);
                                }
                                if (detail.Imprint != null && detail.Imprint.Count > 0)
                                {
                                    foreach (Models.Files.PurchaseOrder.R45_Imprint imprint in detail.Imprint)
                                    {
                                        if (Common.IsValid(imprint, checkseq))
                                        {
                                            writelist.Add(imprint);
                                        }
                                    }
                                }
                                if (Common.IsValid(detail.StickerBarcodeDataRecord, checkseq))
                                {
                                    writelist.Add(detail.StickerBarcodeDataRecord);
                                }
                                if (detail.StickerTextLines != null && detail.StickerTextLines.Count > 0)
                                {
                                    foreach (Models.Files.PurchaseOrder.R46_StickerTextLines text in detail.StickerTextLines)
                                    {
                                        if (Common.IsValid(text, checkseq))
                                        {
                                            writelist.Add(text);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (Common.IsValid(data.PurchaseOrderTrailerRecord, checkseq))
                {
                    writelist.Add(data.PurchaseOrderTrailerRecord);
                }
                if (Common.IsValid(data.FileTrailerRecord, checkseq))
                {
                    writelist.Add(data.FileTrailerRecord);
                }
                MultiRecordEngine engine = new MultiRecordEngine
                                           (
                    typeof(Models.Files.PurchaseOrder.R00_ClientFileHeader),
                    typeof(Models.Files.PurchaseOrder.R10_ClientHeader),
                    typeof(Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions),
                    typeof(Models.Files.PurchaseOrder.R21_PurchaseOrderOptions),
                    typeof(Models.Files.PurchaseOrder.R40_LineItemDetail),
                    typeof(Models.Files.PurchaseOrder.R41_AdditionalLineItemDetail),
                    typeof(Models.Files.PurchaseOrder.R45_Imprint),
                    typeof(Models.Files.PurchaseOrder.R46_StickerBarcodeData),
                    typeof(Models.Files.PurchaseOrder.R46_StickerTextLines),
                    typeof(Models.Files.PurchaseOrder.R50_PurchaseOrderTrailer),
                    typeof(Models.Files.PurchaseOrder.R90_FileTrailer)
                                           )
                {
                    RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom)
                };
                engine.WriteFile(filename, writelist.ToArray());
                success = true;
            }
            catch (Exception ex)
            {
                log.Error(ex);
                success = false;
            }
            return(success);
        }
Ejemplo n.º 23
0
        public bool WriteFile(string filename, Models.Files.PurchaseAcknowledgement.DataSequence.V3 data)
        {
            List <object> writelist = new List <object>();
            bool          success   = false;

            try
            {
                //build list
                writelist.Add(data.FileHeaderRecord);
                if (Common.IsValid(data.PurchaseOrderHeaderRecord))
                {
                    writelist.Add(data.PurchaseOrderHeaderRecord);
                }
                if (data.FreeFormVendor != null && data.FreeFormVendor.Count > 0)
                {
                    foreach (Models.Files.PurchaseAcknowledgement.R21_FreeFormVendor item in data.FreeFormVendor)
                    {
                        if (Common.IsValid(item))
                        {
                            writelist.Add(item);
                        }
                    }
                }
                if (Common.IsValid(data.RecipShipToNameAndAddressRecord))
                {
                    writelist.Add(data.RecipShipToNameAndAddressRecord);
                }
                if (data.RecipShipToAdditionalShippingInfo != null && data.RecipShipToAdditionalShippingInfo.Count > 0)
                {
                    foreach (Models.Files.PurchaseAcknowledgement.R32_RecipientShipToAdditionalShippingInformation item in data.RecipShipToAdditionalShippingInfo)
                    {
                        if (Common.IsValid(item))
                        {
                            writelist.Add(item);
                        }
                    }
                }
                if (Common.IsValid(data.RecipShipToCityStateAndZipRecord))
                {
                    writelist.Add(data.RecipShipToCityStateAndZipRecord);
                }
                if (data.LineItems != null && data.LineItems.Count > 0)
                {
                    foreach (Models.Files.PurchaseAcknowledgement.DataSequence.LineItem item in data.LineItems)
                    {
                        if (Common.IsValid(item.LineItemRecord))
                        {
                            writelist.Add(item.LineItemRecord);
                        }
                        if (Common.IsValid(item.AdditionalDetailRecord))
                        {
                            writelist.Add(item.AdditionalDetailRecord);
                        }
                        if (Common.IsValid(item.AddtionalLineItemTitleRecord))
                        {
                            writelist.Add(item.AddtionalLineItemTitleRecord);
                        }
                        if (Common.IsValid(item.AdditionalLineItemPublisherRecord))
                        {
                            writelist.Add(item.AdditionalLineItemPublisherRecord);
                        }
                        if (Common.IsValid(item.ItemNumberOrPriceRecord))
                        {
                            writelist.Add(item.ItemNumberOrPriceRecord);
                        }
                    }
                }
                if (Common.IsValid(data.PurchaseOrderControlTotalsRecord))
                {
                    writelist.Add(data.PurchaseOrderControlTotalsRecord);
                }
                if (Common.IsValid(data.FileTrailerRecord))
                {
                    writelist.Add(data.FileTrailerRecord);
                }
                MultiRecordEngine engine = new MultiRecordEngine
                                           (
                    typeof(Models.Files.PurchaseAcknowledgement.R02_FileHeader),
                    typeof(Models.Files.PurchaseAcknowledgement.R11_PurchaseOrderHeader),
                    typeof(Models.Files.PurchaseAcknowledgement.R21_FreeFormVendor),
                    typeof(Models.Files.PurchaseAcknowledgement.R30_RecipientShipToNameAndAddress),
                    typeof(Models.Files.PurchaseAcknowledgement.R32_RecipientShipToAdditionalShippingInformation),
                    typeof(Models.Files.PurchaseAcknowledgement.R34_RecipientShipToCityStateAndZip),
                    typeof(Models.Files.PurchaseAcknowledgement.R40_LineItem),
                    typeof(Models.Files.PurchaseAcknowledgement.R41_AdditionalDetail),
                    typeof(Models.Files.PurchaseAcknowledgement.R42_AdditionalLineItem),
                    typeof(Models.Files.PurchaseAcknowledgement.R43_AdditionalLineItem),
                    typeof(Models.Files.PurchaseAcknowledgement.R44_ItemNumberOrPrice),
                    typeof(Models.Files.PurchaseAcknowledgement.R59_PurchaseOrderControlTotals),
                    typeof(Models.Files.PurchaseAcknowledgement.R91_FileTrailer)
                                           )
                {
                    RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom)
                };
                engine.WriteFile(filename, writelist.ToArray());
                success = true;
            }
            catch (Exception ex)
            {
                log.Error(ex);
                success = false;
            }
            return(success);
        }
Ejemplo n.º 24
0
        public bool WriteFile(string filename, Models.Files.PurchaseOrder.DataSequence.V3 data)
        {
            List <object> writelist = new List <object>();
            bool          success   = false;

            try
            {
                //build list
                writelist.Add(data.FileHeaderRecord);
                if (data.PurchaseOrders != null && data.PurchaseOrders.Count > 0)
                {
                    foreach (Models.Files.PurchaseOrder.DataSequence.PurchaseOrder item in data.PurchaseOrders)
                    {
                        writelist.Add(item.ClientHeaderRecord);
                        if (Common.IsValid(item.FixedHandlingInstructionsRecord))
                        {
                            writelist.Add(item.FixedHandlingInstructionsRecord);
                        }
                        if (Common.IsValid(item.PurchaseOrderOptionsRecord))
                        {
                            writelist.Add(item.PurchaseOrderOptionsRecord);
                        }
                        if (Common.IsValid(item.CustomerCostRecord))
                        {
                            writelist.Add(item.CustomerCostRecord);
                        }
                        if (Common.IsValid(item.CustomerBillToNameRecord))
                        {
                            writelist.Add(item.CustomerBillToNameRecord);
                        }
                        if (Common.IsValid(item.CustomerBillToPhoneNumberRecord))
                        {
                            writelist.Add(item.CustomerBillToPhoneNumberRecord);
                        }
                        if (item.CustomerBillToAddressLine != null && item.CustomerBillToAddressLine.Count > 0)
                        {
                            foreach (Models.Files.PurchaseOrder.R27_CustomerBillToAddressLine detail in item.CustomerBillToAddressLine)
                            {
                                if (Common.IsValid(detail))
                                {
                                    writelist.Add(detail);
                                }
                            }
                        }
                        if (Common.IsValid(item.CustomerBillToCityStateZipRecord))
                        {
                            writelist.Add(item.CustomerBillToCityStateZipRecord);
                        }
                        if (Common.IsValid(item.RecipientShipToNameRecord))
                        {
                            writelist.Add(item.RecipientShipToNameRecord);
                        }
                        if (Common.IsValid(item.RecipientShipToPhoneRecord))
                        {
                            writelist.Add(item.RecipientShipToPhoneRecord);
                        }
                        if (item.ShipRecordRecipientAddressLine != null && item.ShipRecordRecipientAddressLine.Count > 0)
                        {
                            foreach (Models.Files.PurchaseOrder.R32_ShippingRecordRecipientAddressLine detail in item.ShipRecordRecipientAddressLine)
                            {
                                if (Common.IsValid(detail))
                                {
                                    writelist.Add(detail);
                                }
                            }
                        }
                        if (Common.IsValid(item.RecipShippingRecordCityStateZipRecord))
                        {
                            writelist.Add(item.RecipShippingRecordCityStateZipRecord);
                        }
                        if (Common.IsValid(item.DropShipDetailRecord))
                        {
                            writelist.Add(item.DropShipDetailRecord);
                        }
                        if (item.SpecialDeliveryInstructions != null && item.SpecialDeliveryInstructions.Count > 0)
                        {
                            foreach (Models.Files.PurchaseOrder.R36_SpecialDeliveryInstructions detail in item.SpecialDeliveryInstructions)
                            {
                                if (Common.IsValid(detail))
                                {
                                    writelist.Add(detail);
                                }
                            }
                        }
                        if (item.MarketingMessage != null && item.MarketingMessage.Count > 0)
                        {
                            foreach (Models.Files.PurchaseOrder.R37_MarketingMessage detail in item.MarketingMessage)
                            {
                                if (Common.IsValid(detail))
                                {
                                    writelist.Add(detail);
                                }
                            }
                        }
                        if (item.GiftMessage != null && item.GiftMessage.Count > 0)
                        {
                            foreach (Models.Files.PurchaseOrder.R38_GiftMessage detail in item.GiftMessage)
                            {
                                if (Common.IsValid(detail))
                                {
                                    writelist.Add(detail);
                                }
                            }
                        }
                        if (item.Items != null && item.Items.Count > 0)
                        {
                            foreach (Models.Files.PurchaseOrder.DataSequence.Item lineitem in item.Items)
                            {
                                if (Common.IsValid(lineitem.LineItemRecord))
                                {
                                    writelist.Add(lineitem.LineItemRecord);
                                }
                                if (Common.IsValid(lineitem.AdditionalLineItemRecord))
                                {
                                    writelist.Add(lineitem.AdditionalLineItemRecord);
                                }
                                if (lineitem.LineItemGiftMessage != null && lineitem.LineItemGiftMessage.Count > 0)
                                {
                                    foreach (Models.Files.PurchaseOrder.R42_LineItemGiftMessage detail in lineitem.LineItemGiftMessage)
                                    {
                                        if (Common.IsValid(detail))
                                        {
                                            writelist.Add(detail);
                                        }
                                    }
                                }
                                if (lineitem.Imprint != null && lineitem.Imprint.Count > 0)
                                {
                                    foreach (Models.Files.PurchaseOrder.R45_Imprint detail in lineitem.Imprint)
                                    {
                                        if (Common.IsValid(detail))
                                        {
                                            writelist.Add(detail);
                                        }
                                    }
                                }
                            }
                        }
                        if (Common.IsValid(item.PurchaseOrderControlRecord))
                        {
                            writelist.Add(item.PurchaseOrderControlRecord);
                        }
                    }
                }
                if (Common.IsValid(data.FileTrailerRecord))
                {
                    writelist.Add(data.FileTrailerRecord);
                }
                MultiRecordEngine engine = new MultiRecordEngine
                                           (
                    typeof(Models.Files.PurchaseOrder.R00_FileHeader),
                    typeof(Models.Files.PurchaseOrder.R10_ClientHeader),
                    typeof(Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions),
                    typeof(Models.Files.PurchaseOrder.R21_PurchaseOrderOptions),
                    typeof(Models.Files.PurchaseOrder.R24_CustomerCost),
                    typeof(Models.Files.PurchaseOrder.R25_CustomerBillToName),
                    typeof(Models.Files.PurchaseOrder.R26_CustomerBillToPhoneNumber),
                    typeof(Models.Files.PurchaseOrder.R27_CustomerBillToAddressLine),
                    typeof(Models.Files.PurchaseOrder.R29_CustomerBillToCityStateZip),
                    typeof(Models.Files.PurchaseOrder.R30_RecipientShipToName),
                    typeof(Models.Files.PurchaseOrder.R31_RecipientShipToPhone),
                    typeof(Models.Files.PurchaseOrder.R32_ShippingRecordRecipientAddressLine),
                    typeof(Models.Files.PurchaseOrder.R34_RecipientShippingRecordCityStateZip),
                    typeof(Models.Files.PurchaseOrder.R35_DropShipDetail),
                    typeof(Models.Files.PurchaseOrder.R36_SpecialDeliveryInstructions),
                    typeof(Models.Files.PurchaseOrder.R37_MarketingMessage),
                    typeof(Models.Files.PurchaseOrder.R38_GiftMessage),
                    typeof(Models.Files.PurchaseOrder.R40_LineItem),
                    typeof(Models.Files.PurchaseOrder.R41_AdditionalLineItem),
                    typeof(Models.Files.PurchaseOrder.R42_LineItemGiftMessage),
                    typeof(Models.Files.PurchaseOrder.R45_Imprint),
                    typeof(Models.Files.PurchaseOrder.R50_PurchaseOrderControl),
                    typeof(Models.Files.PurchaseOrder.R90_FileTrailer)
                                           )
                {
                    RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom)
                };
                engine.WriteFile(filename, writelist.ToArray());
                success = true;
            }
            catch (Exception ex)
            {
                log.Error(ex);
                success = false;
            }
            return(success);
        }
Ejemplo n.º 25
0
        public Models.Files.ShipNotice.DataSequence.V3 ReadFile(string filename, int batchnumber)
        {
            List <Models.Files.ShipNotice.CR_ASNCompany>        cr = null;
            List <Models.Files.ShipNotice.OP_ASNPack>           op = null;
            List <Models.Files.ShipNotice.OR_ASNShipment>       or = null;
            List <Models.Files.ShipNotice.OD_ASNShipmentDetail> od = null;

            //
            Models.Files.ShipNotice.DataSequence.V3 file = null;
            List <Models.Files.ShipNotice.DataSequence.Shipment> allShipments = new List <Models.Files.ShipNotice.DataSequence.Shipment>();

            Models.Files.ShipNotice.DataSequence.Shipment       singleShipment = new Models.Files.ShipNotice.DataSequence.Shipment();
            List <Models.Files.ShipNotice.OD_ASNShipmentDetail> details        = new List <Models.Files.ShipNotice.OD_ASNShipmentDetail>();
            //
            string typename       = string.Empty;
            int    shipmentsCount = 0;
            int    detailsCount   = 0;
            bool   savedokay      = false;

            try
            {
                MultiRecordEngine engine = new MultiRecordEngine
                                           (
                    typeof(Models.Files.ShipNotice.CR_ASNCompany),
                    typeof(Models.Files.ShipNotice.OP_ASNPack),
                    typeof(Models.Files.ShipNotice.OR_ASNShipment),
                    typeof(Models.Files.ShipNotice.OD_ASNShipmentDetail)
                                           )
                {
                    RecordSelector = new RecordTypeSelector(Models.Files.ShipNotice.Selectors.V3.Custom)
                };

                var res = engine.ReadFile(filename);
                if (res != null && res.Length > 0)
                {
                    file = new Models.Files.ShipNotice.DataSequence.V3();
                    foreach (var rec in res)
                    {
                        typename = rec.GetType().Name.ToUpper();
                        switch (typename)
                        {
                        case "CR_ASNCOMPANY":
                            Common.Initialize(ref cr);
                            cr.Add((Models.Files.ShipNotice.CR_ASNCompany)rec);
                            file.FileHeaderRecord = cr.LastItem();
                            break;

                        case "OP_ASNPACK":
                            Common.Initialize(ref op);
                            op.Add((Models.Files.ShipNotice.OP_ASNPack)rec);
                            file.PackRecord = op.LastItem();
                            break;

                        case "OR_ASNSHIPMENT":
                            Common.Initialize(ref or);
                            or.Add((Models.Files.ShipNotice.OR_ASNShipment)rec);
                            if (shipmentsCount > 0)
                            {
                                if (details != null)
                                {
                                    singleShipment.LineItemDetailRecords.AddRange(details);
                                    details      = null;
                                    detailsCount = 0;
                                }
                                if (file.Shipments == null)
                                {
                                    file.Shipments = new List <Models.Files.ShipNotice.DataSequence.Shipment>();
                                }
                                file.Shipments.Add(singleShipment);
                            }
                            shipmentsCount++;
                            singleShipment = new Models.Files.ShipNotice.DataSequence.Shipment()
                            {
                                ShipmentRecord        = new Models.Files.ShipNotice.OR_ASNShipment(),
                                LineItemDetailRecords = new List <Models.Files.ShipNotice.OD_ASNShipmentDetail>()
                            };
                            singleShipment.ShipmentRecord = or.LastItem();
                            break;

                        case "OD_ASNSHIPMENTDETAIL":
                            Common.Initialize(ref od);
                            od.Add((Models.Files.ShipNotice.OD_ASNShipmentDetail)rec);
                            if (detailsCount == 0)
                            {
                                details = new List <Models.Files.ShipNotice.OD_ASNShipmentDetail>();
                            }
                            detailsCount++;
                            details.Add(od.LastItem());
                            break;
                        }
                    }
                    if (details != null)
                    {
                        singleShipment.LineItemDetailRecords.AddRange(details);
                        details      = null;
                        detailsCount = 0;
                        file.Shipments.Add(singleShipment);
                    }
                    using (SQL sql = new SQL(batchnumber, cr, od, op, or)) { savedokay = sql.Successful; }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            return(file);
        }
Ejemplo n.º 26
0
        public List <Models.Files.ShipNotice.DataSequence.V3> ReadFile(string filename, int batchnumber)
        {
            List <Models.Files.ShipNotice.CR_CompanyRecord>     saveRCR = null;
            List <Models.Files.ShipNotice.OR_OrderRecord>       saveROR = null;
            List <Models.Files.ShipNotice.OD_OrderDetailRecord> saveROD = null;
            //
            List <Models.Files.ShipNotice.DataSequence.V3> file = null;

            Models.Files.ShipNotice.DataSequence.V3             notice   = null;
            Models.Files.ShipNotice.DataSequence.Shipment       shipment = new Models.Files.ShipNotice.DataSequence.Shipment();
            List <Models.Files.ShipNotice.OD_OrderDetailRecord> detail   = new List <Models.Files.ShipNotice.OD_OrderDetailRecord>();
            string typename      = string.Empty;
            int    shipmentCount = 0;
            int    detailCount   = 0;
            int    noticeCount   = 0;
            bool   savedokay     = false;

            try
            {
                MultiRecordEngine engine = new MultiRecordEngine
                                           (
                    typeof(Models.Files.ShipNotice.CR_CompanyRecord),
                    typeof(Models.Files.ShipNotice.OD_OrderDetailRecord),
                    typeof(Models.Files.ShipNotice.OR_OrderRecord)
                                           )
                {
                    RecordSelector = new RecordTypeSelector(Models.Files.ShipNotice.Selectors.V3.Custom)
                };
                var res = engine.ReadFile(filename);
                if (res != null && res.Length > 0)
                {
                    file = new List <Models.Files.ShipNotice.DataSequence.V3>();
                    foreach (var rec in res)
                    {
                        typename = rec.GetType().Name.ToUpper();
                        switch (typename)
                        {
                        case "CR_COMPANYRECORD":
                            Common.Initialize(ref saveRCR);
                            saveRCR.Add((Models.Files.ShipNotice.CR_CompanyRecord)rec);
                            if (noticeCount > 0)
                            {
                                if (detailCount > 0)
                                {
                                    if (detail != null)
                                    {
                                        shipment.OrderDetail = detail;
                                        shipment.OrderRecord = saveROR.LastItem();
                                        detail      = null;
                                        detailCount = 0;
                                    }
                                }
                                if (shipment != null)
                                {
                                    if (notice.Shipments == null)
                                    {
                                        notice.Shipments = new List <Models.Files.ShipNotice.DataSequence.Shipment>();
                                    }
                                    notice.Shipments.Add(shipment);
                                    shipment      = null;
                                    shipmentCount = 0;
                                }
                                if (notice != null)
                                {
                                    file.Add(notice);
                                    notice = null;
                                }
                            }
                            noticeCount++;
                            notice = new Models.Files.ShipNotice.DataSequence.V3()
                            {
                                CompanyRecord = saveRCR.LastItem()
                            };
                            break;

                        case "OR_ORDERRECORD":
                            Common.Initialize(ref saveROR);
                            saveROR.Add((Models.Files.ShipNotice.OR_OrderRecord)rec);
                            shipmentCount++;
                            if (shipment == null)
                            {
                                shipment = new Models.Files.ShipNotice.DataSequence.Shipment()
                                {
                                    OrderRecord = new Models.Files.ShipNotice.OR_OrderRecord(),
                                    OrderDetail = new List <Models.Files.ShipNotice.OD_OrderDetailRecord>()
                                };
                            }
                            shipment.OrderRecord = saveROR.LastItem();
                            break;

                        case "OD_ORDERDETAILRECORD":
                            Common.Initialize(ref saveROD);
                            saveROD.Add((Models.Files.ShipNotice.OD_OrderDetailRecord)rec);
                            if (detailCount == 0)
                            {
                                detail = new List <Models.Files.ShipNotice.OD_OrderDetailRecord>();
                            }
                            detailCount++;
                            detail.Add(saveROD.LastItem());
                            break;
                        }
                    }
                    if (detail != null)
                    {
                        shipment.OrderDetail.AddRange(detail);
                        detail      = null;
                        detailCount = 0;
                        notice.Shipments.Add(shipment);
                    }
                    if (notice != null)
                    {
                        file.Add(notice);
                        notice = null;
                    }
                }
                using (SQL sql = new SQL(batchnumber, saveRCR, saveROD, saveROR)) { savedokay = sql.Successful; }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            return(file);
        }
Ejemplo n.º 27
0
 public AsyncEnumerator(MultiRecordEngine engine)
 {
     mEngine = engine;
 }
Ejemplo n.º 28
0
 private Type CustomSelectorReturningBadType(MultiRecordEngine engine, string record)
 {
     return(typeof(string));
 }
Ejemplo n.º 29
0
 private Type mySelector(MultiRecordEngine unused, string record)
 {
     if (record[0] == 'C')
         return CopyrightRecordType;
     else if (record[0] == 'D')
         return DetailRecordType;
     else
         throw new Exception();
 }
Ejemplo n.º 30
0
        public bool WriteFile(string filename, Models.Files.Invoice.DataSequence.V3 data)
        {
            List <object> writelist = new List <object>();
            bool          success   = false;

            try
            {
                //build list
                writelist.Add(data.InvoiceFileHeaderRecord);
                if (data.Invoices != null && data.Invoices.Count > 0)
                {
                    foreach (Models.Files.Invoice.DataSequence.InvoiceItem item in data.Invoices)
                    {
                        if (Common.IsValid(item.InvoiceHeaderRecord))
                        {
                            writelist.Add(item.InvoiceHeaderRecord);
                        }
                        foreach (Models.Files.Invoice.DataSequence.InvoiceDetail detail in item.InvoiceDetails)
                        {
                            if (Common.IsValid(detail.InvoiceDetailRecord))
                            {
                                writelist.Add(detail.InvoiceDetailRecord);
                            }
                            if (Common.IsValid(detail.InvoiceDetail2Record))
                            {
                                writelist.Add(detail.InvoiceDetail2Record);
                            }
                            if (Common.IsValid(detail.DetailTotalRecord))
                            {
                                writelist.Add(detail.DetailTotalRecord);
                            }
                            if (Common.IsValid(detail.DetailTotalOrFreightAndFeesRecord))
                            {
                                writelist.Add(detail.DetailTotalOrFreightAndFeesRecord);
                            }
                        }
                        if (Common.IsValid(item.InvoiceTotalRecord))
                        {
                            writelist.Add(item.InvoiceTotalRecord);
                        }
                        if (Common.IsValid(item.InvoiceTrailerRecord))
                        {
                            writelist.Add(item.InvoiceTrailerRecord);
                        }
                    }
                }
                if (Common.IsValid(data.InvoiceFileTrailerRecord))
                {
                    writelist.Add(data.InvoiceFileTrailerRecord);
                }
                MultiRecordEngine engine = new MultiRecordEngine
                                           (
                    typeof(Models.Files.Invoice.R01_InvoiceFileHeader),
                    typeof(Models.Files.Invoice.R15_InvoiceHeader),
                    typeof(Models.Files.Invoice.R45_InvoiceDetail),
                    typeof(Models.Files.Invoice.R46_InvoiceDetail),
                    typeof(Models.Files.Invoice.R48_DetailTotal),
                    typeof(Models.Files.Invoice.R49_DetailTotalOrFreightAndFees),
                    typeof(Models.Files.Invoice.R55_InvoiceTotals),
                    typeof(Models.Files.Invoice.R57_InvoiceTrailer),
                    typeof(Models.Files.Invoice.R95_InvoiceFileTrailer)
                                           )
                {
                    RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom)
                };
                engine.WriteFile(filename, writelist.ToArray());
                success = true;
            }
            catch (Exception ex)
            {
                log.Error(ex);
                success = false;
            }
            return(success);
        }
Ejemplo n.º 31
0
        public bool PurchaseOrders(Concentrator.Objects.Models.Orders.Order order, List <Concentrator.Objects.Models.Orders.OrderLine> orderLines, Concentrator.Objects.Models.Vendors.Vendor administrativeVendor, Concentrator.Objects.Models.Vendors.Vendor vendor, bool directShipment, IUnitOfWork unit, ILog logger)
        {
            var filiaal890StockType = unit.Scope.Repository <VendorStockType>().GetSingle(x => x.StockType == "Filiaal890");

            if (filiaal890StockType == null)
            {
                throw new Exception("Stocklocation Filiaal890 does not exists, skip order process");
            }

            var cmStockType = unit.Scope.Repository <VendorStockType>().GetSingle(x => x.StockType == "CM");

            if (cmStockType == null)
            {
                throw new Exception("Stocklocation CM does not exists, skip order process");
            }

            var transferStockType = unit.Scope.Repository <VendorStockType>().GetSingle(x => x.StockType == "Transfer");

            if (transferStockType == null)
            {
                throw new Exception("Stocklocation Transfer does not exists, skip order process");
            }

            var webShopStockType = unit.Scope.Repository <VendorStockType>().GetSingle(x => x.StockType == "Webshop");

            if (webShopStockType == null)
            {
                throw new Exception("Stocklocation Webshop does not exists, skip order process");
            }

            var fileLocation = vendor.VendorSettings.GetValueByKey("casmutLocation", string.Empty);

            if (string.IsNullOrEmpty(fileLocation))
            {
                throw new Exception("No camutlocation vendorsetting for vendor" + vendor.VendorID);
            }

            #region File Network Location
            NetworkExportUtility util = new NetworkExportUtility();

            var userName = vendor.VendorSettings.GetValueByKey("CasMutLocationUserName", string.Empty);
            if (string.IsNullOrEmpty(userName))
            {
                throw new Exception("No Casmutlocation UserName");
            }

            var password = vendor.VendorSettings.GetValueByKey("CasMutLocationPassword", string.Empty);
            if (string.IsNullOrEmpty(password))
            {
                throw new Exception("No Casmutlocation Password");
            }

#if DEBUG
            fileLocation = @"D:\tmp\CC";
#else
            fileLocation = util.ConnectorNetworkPath(fileLocation, "Y:", userName, password);
#endif
            #endregion

            var triggerFilePath = Path.Combine(fileLocation, "kasmut.oke");



            if (File.Exists(triggerFilePath))
            {
                try
                {
                    File.Delete(triggerFilePath);
                }
                catch (Exception) { }                 //in case in use by PFA process
            }
            using (var engine = new MultiRecordEngine(typeof(Casmut), typeof(DatColNormalSales)))
            {
                var file = Path.Combine(fileLocation, "kasmut");

                if (!File.Exists(file))
                {
                    File.Create(file).Dispose();
                }
                engine.BeginAppendToFile(file);

                orderLines.Where(c => (!c.Product.IsNonAssortmentItem.HasValue || (c.Product.IsNonAssortmentItem.HasValue && !c.Product.IsNonAssortmentItem.Value))).ToList().ForEach(line =>
                {
                    var filiaal890Stock = line.Product.VendorStocks.FirstOrDefault(x => x.VendorStockTypeID == filiaal890StockType.VendorStockTypeID && x.VendorID == 1);
                    if (filiaal890Stock == null)
                    {
                        throw new Exception(string.Format("Stocklocation Filiaal890 does not exists for product {0}, skip order process", line.ProductID));
                    }

                    var cmStock = line.Product.VendorStocks.FirstOrDefault(x => x.VendorStockTypeID == cmStockType.VendorStockTypeID && x.VendorID == 1);
                    if (cmStock == null)
                    {
                        throw new Exception(string.Format("Stocklocation CM does not exists for product {0}, skip order process", line.ProductID));
                    }

                    var transferStock = line.Product.VendorStocks.FirstOrDefault(x => x.VendorStockTypeID == transferStockType.VendorStockTypeID && x.VendorID == 1);
                    if (transferStock == null)
                    {
                        throw new Exception(string.Format("Stocklocation Transfer does not exists for product {0}, skip order process", line.ProductID));
                    }

                    var webshopStock = line.Product.VendorStocks.FirstOrDefault(x => x.VendorStockTypeID == webShopStockType.VendorStockTypeID && x.VendorID == 1);
                    if (webshopStock == null)
                    {
                        throw new Exception(string.Format("Stocklocation Webshop does not exists for product {0}, skip order process", line.ProductID));
                    }
                    try
                    {
                        logger.Info("For order " + order.WebSiteOrderNumber + " and orderline  " + line.OrderLineID);
                        logger.Info("Transfer quantity is " + transferStock.QuantityOnHand);
                        logger.Info("CM quantity is " + cmStock.QuantityOnHand);
                        logger.Info("WMS quantity is " + filiaal890Stock.QuantityOnHand);
                        logger.Info("Desired qty is " + line.Quantity);
                    }
                    catch (Exception)
                    {
                    }
                    int transferQuantity = (filiaal890Stock.QuantityOnHand + transferStock.QuantityOnHand) - line.Quantity;

                    if (transferQuantity < 0)
                    {
                        int transferPrePickQuanity = cmStock.QuantityOnHand - Math.Abs(transferQuantity);
                        int quantityToDispatch     = Math.Abs(transferQuantity);

                        if (transferPrePickQuanity < 0)
                        {
                            quantityToDispatch = Math.Abs(transferQuantity) - Math.Abs(transferPrePickQuanity);
                        }


                        if (quantityToDispatch < Math.Abs(transferQuantity))
                        {
                            int quantityCancelled = Math.Abs(transferQuantity) - quantityToDispatch;

                            line.SetStatus(OrderLineStatus.Cancelled, unit.Scope.Repository <OrderLedger>(), quantityCancelled);

                            CancelLine(line, unit, quantityCancelled, "Out of stock, no CM stock availible");
                        }

                        if (quantityToDispatch > 0)
                        {
                            var barcode = line.Product.ProductBarcodes.FirstOrDefault(x => x.BarcodeType.HasValue && x.BarcodeType.Value == 0);

                            Casmut casmut = new Casmut()
                            {
                                EAN = barcode != null ? barcode.Barcode : string.Empty,
                                PickTicketNumber = line.OrderLineID,
                                PosNumber        = 100,
                                TicketNumber     = line.OrderLineID,
                                SalesDate        = DateTime.Now,
                                ShopNumber       = 890,
                                SKUCount         = quantityToDispatch
                            };

                            line.SetStatus(OrderLineStatus.ProcessedKasmut, unit.Scope.Repository <OrderLedger>(), quantityToDispatch);

                            // If complete quantity is send
                            if (quantityToDispatch == line.Quantity)
                            {
                                line.SetStatus(OrderLineStatus.ProcessedExportNotification, unit.Scope.Repository <OrderLedger>());
                            }

                            casmut.SalesValue = (int)Math.Round((double)(line.UnitPrice.HasValue ? (int)Math.Round((((line.UnitPrice.Value - (line.LineDiscount.HasValue ? line.LineDiscount.Value : 0)) * quantityToDispatch) * 100)) : 0));

                            engine.WriteNext(casmut);
#if DEBUG
                            engine.Flush();
#endif
                            cmStock.QuantityOnHand       = cmStock.QuantityOnHand - quantityToDispatch;
                            transferStock.QuantityOnHand = transferStock.QuantityOnHand + quantityToDispatch;

                            unit.Save();
                        }
                    }

                    filiaal890Stock.QuantityOnHand = filiaal890Stock.QuantityOnHand - line.GetDispatchQuantity();

                    webshopStock.QuantityOnHand = cmStock.QuantityOnHand + transferStock.QuantityOnHand + filiaal890Stock.QuantityOnHand;

                    line.SetStatus(OrderLineStatus.ReadyToOrder, unit.Scope.Repository <OrderLedger>());
                    try
                    {
                        logger.Info("After processing for order " + order.WebSiteOrderNumber + " and orderline  " + line.OrderLineID);
                        logger.Info("Transfer quantity is " + transferStock.QuantityOnHand);
                        logger.Info("CM quantity is " + cmStock.QuantityOnHand);
                        logger.Info("WMS quantity is " + filiaal890Stock.QuantityOnHand);
                    }
                    catch (Exception e)
                    {
                        logger.Debug(e);
                    }
                });

                engine.Flush();

#if !DEBUG
                util.DisconnectNetworkPath(fileLocation);
#endif
            }

            if (!File.Exists(triggerFilePath))
            {
                try
                {
                    File.Create(triggerFilePath);
                }
                catch (Exception) { }
            }
            unit.Save();
            return(false);
        }
Ejemplo n.º 32
0
        public static Type Custom(MultiRecordEngine engine, string recordLine)
        {
            Console.WriteLine(recordLine);
            Type type = null;

            switch (recordLine.Substring(0, 2))
            {
            case "02":
                type = typeof(R02_FileHeader);
                break;

            case "11":
                type = typeof(R11_PurchaseOrderHeader);
                break;

            case "21":
                type = typeof(R21_FreeFormVendor);
                break;

            case "30":
                type = typeof(R30_RecipientShipToNameAndAddress);
                break;

            case "32":
                type = typeof(R32_RecipientShipToAdditionalShippingInformation);
                break;

            case "34":
                type = typeof(R34_RecipientShipToCityStateAndZip);
                break;

            case "40":
                type = typeof(R40_LineItem);
                break;

            case "41":
                type = typeof(R41_AdditionalDetail);
                break;

            case "42":
                type = typeof(R42_AdditionalLineItem);
                break;

            case "43":
                type = typeof(R43_AdditionalLineItem);
                break;

            case "44":
                type = typeof(R44_ItemNumberOrPrice);
                break;

            case "59":
                type = typeof(R59_PurchaseOrderControlTotals);
                break;

            case "91":
                type = typeof(R91_FileTrailer);
                break;
            }
            return(type);
        }
Ejemplo n.º 33
0
 private Program(IDictionary<string, Type> recordTypes)
 {
     this.recordTypes = recordTypes;
     engine = new MultiRecordEngine(recordTypes.Values.ToArray());
     engine.RecordSelector = new RecordTypeSelector(CustomSelector);
 }
Ejemplo n.º 34
0
        public Models.Files.Invoice.DataSequence.V3 ReadFile(string filename, int batchnumber)
        {
            List <Models.Files.Invoice.R01_InvoiceFileHeader>           r01 = null;
            List <Models.Files.Invoice.R15_InvoiceHeader>               r15 = null;
            List <Models.Files.Invoice.R45_InvoiceDetail>               r45 = null;
            List <Models.Files.Invoice.R46_InvoiceDetail>               r46 = null;
            List <Models.Files.Invoice.R48_DetailTotal>                 r48 = null;
            List <Models.Files.Invoice.R49_DetailTotalOrFreightAndFees> r49 = null;
            List <Models.Files.Invoice.R55_InvoiceTotals>               r55 = null;
            List <Models.Files.Invoice.R57_InvoiceTrailer>              r57 = null;
            List <Models.Files.Invoice.R95_InvoiceFileTrailer>          r95 = null;

            //
            Models.Files.Invoice.DataSequence.V3            file    = null;
            Models.Files.Invoice.DataSequence.InvoiceItem   invoice = null;
            Models.Files.Invoice.DataSequence.InvoiceDetail detail  = null;
            //
            string typename;
            int    invoiceCount = 0;
            int    detailCount  = 0;
            bool   savedokay    = false;

            try
            {
                MultiRecordEngine engine = new MultiRecordEngine
                                           (
                    typeof(Models.Files.Invoice.R01_InvoiceFileHeader),
                    typeof(Models.Files.Invoice.R15_InvoiceHeader),
                    typeof(Models.Files.Invoice.R45_InvoiceDetail),
                    typeof(Models.Files.Invoice.R46_InvoiceDetail),
                    typeof(Models.Files.Invoice.R48_DetailTotal),
                    typeof(Models.Files.Invoice.R49_DetailTotalOrFreightAndFees),
                    typeof(Models.Files.Invoice.R55_InvoiceTotals),
                    typeof(Models.Files.Invoice.R57_InvoiceTrailer),
                    typeof(Models.Files.Invoice.R95_InvoiceFileTrailer)
                                           )
                {
                    RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom)
                };

                var res = engine.ReadFile(filename);

                if (res != null && res.Length > 0)
                {
                    file = new Models.Files.Invoice.DataSequence.V3();
                    foreach (var rec in res)
                    {
                        typename = rec.GetType().Name.ToUpper();
                        switch (typename)
                        {
                        case "R01_INVOICEFILEHEADER":
                            Common.Initialize(ref r01);
                            r01.Add((Models.Files.Invoice.R01_InvoiceFileHeader)rec);
                            file.InvoiceFileHeaderRecord = r01.LastItem();
                            break;

                        case "R15_INVOICEHEADER":
                            Common.Initialize(ref r15);
                            r15.Add((Models.Files.Invoice.R15_InvoiceHeader)rec);
                            if (invoiceCount > 0)
                            {
                                if (invoice != null)
                                {
                                    file.Invoices.Add(invoice);
                                    invoice = null;
                                }
                            }
                            invoiceCount++;
                            if (invoice == null)
                            {
                                invoice = new Models.Files.Invoice.DataSequence.InvoiceItem();
                            }
                            invoice.InvoiceHeaderRecord = r15.LastItem();
                            break;

                        case "R45_INVOICEDETAIL":
                            Common.Initialize(ref r45);
                            r45.Add((Models.Files.Invoice.R45_InvoiceDetail)rec);
                            if (detailCount > 0)
                            {
                                if (detail != null)
                                {
                                    invoice.InvoiceDetails.Add(detail);
                                    detail = null;
                                }
                            }
                            detailCount++;
                            if (detail == null)
                            {
                                detail = new Models.Files.Invoice.DataSequence.InvoiceDetail();
                            }
                            detail.InvoiceDetailRecord = r45.LastItem();
                            break;

                        case "R46_INVOICEDETAIL":
                            Common.Initialize(ref r46);
                            r46.Add((Models.Files.Invoice.R46_InvoiceDetail)rec);
                            detail.InvoiceDetail2Record = r46.LastItem();
                            break;

                        case "R48_DETAILTOTAL":
                            Common.Initialize(ref r48);
                            r48.Add((Models.Files.Invoice.R48_DetailTotal)rec);
                            detail.DetailTotalRecord = r48.LastItem();
                            break;

                        case "R49_DETAILTOTALORFREIGHTANDFEES":
                            Common.Initialize(ref r49);
                            r49.Add((Models.Files.Invoice.R49_DetailTotalOrFreightAndFees)rec);
                            detail.DetailTotalOrFreightAndFeesRecord = r49.LastItem();
                            break;

                        case "R55_INVOICETOTALS":
                            Common.Initialize(ref r55);
                            r55.Add((Models.Files.Invoice.R55_InvoiceTotals)rec);
                            invoice.InvoiceTotalRecord = r55.LastItem();
                            if (detail != null)
                            {
                                invoice.InvoiceDetails.Add(detail);
                                detail = null;
                            }
                            break;

                        case "R57_INVOICETRAILER":
                            Common.Initialize(ref r57);
                            r57.Add((Models.Files.Invoice.R57_InvoiceTrailer)rec);
                            if (detail != null)
                            {
                                invoice.InvoiceDetails.Add(detail);
                                detail = null;
                            }
                            invoice.InvoiceTrailerRecord = r57.LastItem();
                            break;

                        case "R95_INVOICEFILETRAILER":
                            Common.Initialize(ref r95);
                            r95.Add((Models.Files.Invoice.R95_InvoiceFileTrailer)rec);
                            file.InvoiceFileTrailerRecord = r95.LastItem();
                            break;
                        }
                    }
                    if (invoice != null)
                    {
                        file.Invoices.Add(invoice);
                        invoice = null;
                    }
                    using (SQL sql = new SQL(batchnumber, r01, r15, r45, r46, r48, r49, r55, r57, r95)) { savedokay = sql.Successful; }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            return(file);
        }
Ejemplo n.º 35
0
 public void NoSelector()
 {
     engine = new MultiRecordEngine(typeof(CustomersVerticalBar), typeof(CustomersTab));
 }
Ejemplo n.º 36
0
        public Models.Files.PurchaseOrder.DataSequence.V3 ReadFile(string filename, int batchnumber)
        {
            List <Models.Files.PurchaseOrder.R00_FileHeader>   r00 = null;
            List <Models.Files.PurchaseOrder.R10_ClientHeader> r10 = null;
            List <Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions> r20    = null;
            List <Models.Files.PurchaseOrder.R21_PurchaseOrderOptions>             r21    = null;
            List <Models.Files.PurchaseOrder.R24_CustomerCost>                        r24 = null;
            List <Models.Files.PurchaseOrder.R25_CustomerBillToName>                  r25 = null;
            List <Models.Files.PurchaseOrder.R26_CustomerBillToPhoneNumber>           r26 = null;
            List <Models.Files.PurchaseOrder.R27_CustomerBillToAddressLine>           r27 = null;
            List <Models.Files.PurchaseOrder.R29_CustomerBillToCityStateZip>          r29 = null;
            List <Models.Files.PurchaseOrder.R30_RecipientShipToName>                 r30 = null;
            List <Models.Files.PurchaseOrder.R31_RecipientShipToPhone>                r31 = null;
            List <Models.Files.PurchaseOrder.R32_ShippingRecordRecipientAddressLine>  r32 = null;
            List <Models.Files.PurchaseOrder.R34_RecipientShippingRecordCityStateZip> r34 = null;
            List <Models.Files.PurchaseOrder.R35_DropShipDetail>                      r35 = null;
            List <Models.Files.PurchaseOrder.R36_SpecialDeliveryInstructions>         r36 = null;
            List <Models.Files.PurchaseOrder.R37_MarketingMessage>                    r37 = null;
            List <Models.Files.PurchaseOrder.R38_GiftMessage>          r38 = null;
            List <Models.Files.PurchaseOrder.R40_LineItem>             r40 = null;
            List <Models.Files.PurchaseOrder.R41_AdditionalLineItem>   r41 = null;
            List <Models.Files.PurchaseOrder.R42_LineItemGiftMessage>  r42 = null;
            List <Models.Files.PurchaseOrder.R45_Imprint>              r45 = null;
            List <Models.Files.PurchaseOrder.R50_PurchaseOrderControl> r50 = null;
            List <Models.Files.PurchaseOrder.R90_FileTrailer>          r90 = null;

            //
            Models.Files.PurchaseOrder.DataSequence.V3            file  = null;
            Models.Files.PurchaseOrder.DataSequence.PurchaseOrder order = null;
            Models.Files.PurchaseOrder.DataSequence.Item          item  = null;
            //
            string typename   = string.Empty;
            int    orderCount = 0;
            int    itemCount  = 0;
            bool   savedokay  = false;

            try
            {
                MultiRecordEngine engine = new MultiRecordEngine
                                           (
                    typeof(Models.Files.PurchaseOrder.R00_FileHeader),
                    typeof(Models.Files.PurchaseOrder.R10_ClientHeader),
                    typeof(Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions),
                    typeof(Models.Files.PurchaseOrder.R21_PurchaseOrderOptions),
                    typeof(Models.Files.PurchaseOrder.R24_CustomerCost),
                    typeof(Models.Files.PurchaseOrder.R25_CustomerBillToName),
                    typeof(Models.Files.PurchaseOrder.R26_CustomerBillToPhoneNumber),
                    typeof(Models.Files.PurchaseOrder.R27_CustomerBillToAddressLine),
                    typeof(Models.Files.PurchaseOrder.R29_CustomerBillToCityStateZip),
                    typeof(Models.Files.PurchaseOrder.R30_RecipientShipToName),
                    typeof(Models.Files.PurchaseOrder.R31_RecipientShipToPhone),
                    typeof(Models.Files.PurchaseOrder.R32_ShippingRecordRecipientAddressLine),
                    typeof(Models.Files.PurchaseOrder.R34_RecipientShippingRecordCityStateZip),
                    typeof(Models.Files.PurchaseOrder.R35_DropShipDetail),
                    typeof(Models.Files.PurchaseOrder.R36_SpecialDeliveryInstructions),
                    typeof(Models.Files.PurchaseOrder.R37_MarketingMessage),
                    typeof(Models.Files.PurchaseOrder.R38_GiftMessage),
                    typeof(Models.Files.PurchaseOrder.R40_LineItem),
                    typeof(Models.Files.PurchaseOrder.R41_AdditionalLineItem),
                    typeof(Models.Files.PurchaseOrder.R42_LineItemGiftMessage),
                    typeof(Models.Files.PurchaseOrder.R45_Imprint),
                    typeof(Models.Files.PurchaseOrder.R50_PurchaseOrderControl),
                    typeof(Models.Files.PurchaseOrder.R90_FileTrailer)
                                           )
                {
                    RecordSelector = new RecordTypeSelector(Models.Files.PurchaseOrder.Selectors.V3.Custom)
                };
                var res = engine.ReadFile(filename);
                if (res != null && res.Length > 0)
                {
                    file = new Models.Files.PurchaseOrder.DataSequence.V3();
                    foreach (var rec in res)
                    {
                        typename = rec.GetType().Name.ToUpper();
                        switch (typename)
                        {
                        case "R00_FILEHEADER":
                            Common.Initialize(ref r00);
                            r00.Add((Models.Files.PurchaseOrder.R00_FileHeader)rec);
                            file.FileHeaderRecord = r00.LastItem();
                            break;

                        case "R10_CLIENTHEADER":
                            Common.Initialize(ref r10);
                            r10.Add((Models.Files.PurchaseOrder.R10_ClientHeader)rec);
                            if (orderCount > 0)
                            {
                                if (file.PurchaseOrders == null)
                                {
                                    file.PurchaseOrders = new List <Models.Files.PurchaseOrder.DataSequence.PurchaseOrder>();
                                }
                                if (order != null)
                                {
                                    file.PurchaseOrders.Add(order);
                                    order = null;
                                }
                            }
                            orderCount++;
                            order = new Models.Files.PurchaseOrder.DataSequence.PurchaseOrder
                            {
                                ClientHeaderRecord = r10.LastItem()
                            };
                            break;

                        case "R20_FIXEDSPECIALHANDLINGINSTRUCTIONS":
                            Common.Initialize(ref r20);
                            r20.Add((Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions)rec);
                            order.FixedHandlingInstructionsRecord = r20.LastItem();
                            break;

                        case "R21_PURCHASEORDEROPTIONS":
                            Common.Initialize(ref r21);
                            r21.Add((Models.Files.PurchaseOrder.R21_PurchaseOrderOptions)rec);
                            order.PurchaseOrderOptionsRecord = r21.LastItem();
                            break;

                        case "R24_CUSTOMERCOST":
                            Common.Initialize(ref r24);
                            r24.Add((Models.Files.PurchaseOrder.R24_CustomerCost)rec);
                            order.CustomerCostRecord = r24.LastItem();
                            break;

                        case "R25_CUSTOMERBILLTONAME":
                            Common.Initialize(ref r25);
                            r25.Add((Models.Files.PurchaseOrder.R25_CustomerBillToName)rec);
                            order.CustomerBillToNameRecord = r25.LastItem();
                            break;

                        case "R26_CUSTOMERBILLTOPHONENUMBER":
                            Common.Initialize(ref r26);
                            r26.Add((Models.Files.PurchaseOrder.R26_CustomerBillToPhoneNumber)rec);
                            order.CustomerBillToPhoneNumberRecord = r26.LastItem();
                            break;

                        case "R27_CUSTOMERBILLTOADDRESSLINE":
                            Common.Initialize(ref r27);
                            r27.Add((Models.Files.PurchaseOrder.R27_CustomerBillToAddressLine)rec);
                            if (order.CustomerBillToAddressLine == null)
                            {
                                order.CustomerBillToAddressLine = new List <Models.Files.PurchaseOrder.R27_CustomerBillToAddressLine>();
                            }
                            if (order.CustomerBillToAddressLine.Count < file.Maxes[typename])
                            {
                                order.CustomerBillToAddressLine.Add(r27.LastItem());
                            }
                            break;

                        case "R29_CUSTOMERBILLTOCITYSTATEZIP":
                            Common.Initialize(ref r29);
                            r29.Add((Models.Files.PurchaseOrder.R29_CustomerBillToCityStateZip)rec);
                            order.CustomerBillToCityStateZipRecord = r29.LastItem();
                            break;

                        case "R30_RECIPIENTSHIPTONAME":
                            Common.Initialize(ref r30);
                            r30.Add((Models.Files.PurchaseOrder.R30_RecipientShipToName)rec);
                            order.RecipientShipToNameRecord = r30.LastItem();
                            break;

                        case "R31_RECIPIENTSHIPTOPHONE":
                            Common.Initialize(ref r31);
                            r31.Add((Models.Files.PurchaseOrder.R31_RecipientShipToPhone)rec);
                            order.RecipientShipToPhoneRecord = r31.LastItem();
                            break;

                        case "R32_SHIPPINGRECORDRECIPIENTADDRESSLINE":
                            Common.Initialize(ref r32);
                            r32.Add((Models.Files.PurchaseOrder.R32_ShippingRecordRecipientAddressLine)rec);
                            if (order.ShipRecordRecipientAddressLine == null)
                            {
                                order.ShipRecordRecipientAddressLine = new List <Models.Files.PurchaseOrder.R32_ShippingRecordRecipientAddressLine>();
                            }
                            if (order.ShipRecordRecipientAddressLine.Count < file.Maxes[typename])
                            {
                                order.ShipRecordRecipientAddressLine.Add(r32.LastItem());
                            }
                            break;

                        case "R34_RECIPIENTSHIPPINGRECORDCITYSTATEZIP":
                            Common.Initialize(ref r34);
                            r34.Add((Models.Files.PurchaseOrder.R34_RecipientShippingRecordCityStateZip)rec);
                            order.RecipShippingRecordCityStateZipRecord = r34.LastItem();
                            break;

                        case "R35_DROPSHIPDETAIL":
                            Common.Initialize(ref r35);
                            r35.Add((Models.Files.PurchaseOrder.R35_DropShipDetail)rec);
                            order.DropShipDetailRecord = r35.LastItem();
                            break;

                        case "R36_SPECIALDELIVERYINSTRUCTIONS":
                            Common.Initialize(ref r36);
                            r36.Add((Models.Files.PurchaseOrder.R36_SpecialDeliveryInstructions)rec);
                            if (order.SpecialDeliveryInstructions == null)
                            {
                                order.SpecialDeliveryInstructions = new List <Models.Files.PurchaseOrder.R36_SpecialDeliveryInstructions>();
                            }
                            if (order.SpecialDeliveryInstructions.Count < file.Maxes[typename])
                            {
                                order.SpecialDeliveryInstructions.Add(r36.LastItem());
                            }
                            break;

                        case "R37_MARKETINGMESSAGE":
                            Common.Initialize(ref r37);
                            r37.Add((Models.Files.PurchaseOrder.R37_MarketingMessage)rec);
                            if (order.MarketingMessage == null)
                            {
                                order.MarketingMessage = new List <Models.Files.PurchaseOrder.R37_MarketingMessage>();
                            }
                            if (order.MarketingMessage.Count < file.Maxes[typename])
                            {
                                order.MarketingMessage.Add(r37.LastItem());
                            }
                            break;

                        case "R38_GIFTMESSAGE":
                            Common.Initialize(ref r38);
                            r38.Add((Models.Files.PurchaseOrder.R38_GiftMessage)rec);
                            if (order.GiftMessage == null)
                            {
                                order.GiftMessage = new List <Models.Files.PurchaseOrder.R38_GiftMessage>();
                            }
                            if (order.GiftMessage.Count < file.Maxes[typename])
                            {
                                order.GiftMessage.Add(r38.LastItem());
                            }
                            break;

                        case "R40_LINEITEM":
                            Common.Initialize(ref r40);
                            r40.Add((Models.Files.PurchaseOrder.R40_LineItem)rec);
                            if (itemCount > 0)
                            {
                                if (order.Items == null)
                                {
                                    order.Items = new List <Models.Files.PurchaseOrder.DataSequence.Item>();
                                }
                                if (item != null)
                                {
                                    order.Items.Add(item);
                                    item = null;
                                }
                            }
                            itemCount++;
                            item = new Models.Files.PurchaseOrder.DataSequence.Item
                            {
                                LineItemRecord = r40.LastItem()
                            };
                            break;

                        case "R41_ADDITIONALLINEITEM":
                            Common.Initialize(ref r41);
                            r41.Add((Models.Files.PurchaseOrder.R41_AdditionalLineItem)rec);
                            item.AdditionalLineItemRecord = r41.LastItem();
                            break;

                        case "R42_LINEITEMGIFTMESSAGE":
                            Common.Initialize(ref r42);
                            r42.Add((Models.Files.PurchaseOrder.R42_LineItemGiftMessage)rec);
                            if (item.LineItemGiftMessage.Count < file.Maxes[typename])
                            {
                                item.LineItemGiftMessage.Add(r42.LastItem());
                            }
                            break;

                        case "R45_IMPRINT":
                            Common.Initialize(ref r45);
                            r45.Add((Models.Files.PurchaseOrder.R45_Imprint)rec);
                            if (item.Imprint == null)
                            {
                                item.Imprint = new List <Models.Files.PurchaseOrder.R45_Imprint>();
                            }
                            if (item.Imprint.Count < file.Maxes[typename])
                            {
                                item.Imprint.Add(r45.LastItem());
                            }
                            break;

                        case "R50_PURCHASEORDERCONTROL":
                            Common.Initialize(ref r50);
                            r50.Add((Models.Files.PurchaseOrder.R50_PurchaseOrderControl)rec);
                            order.PurchaseOrderControlRecord = r50.LastItem();
                            file.PurchaseOrders.Add(order);
                            if (item != null)
                            {
                                if (file.PurchaseOrders[file.PurchaseOrders.Count - 1].Items == null)
                                {
                                    file.PurchaseOrders[file.PurchaseOrders.Count - 1].Items = new List <Models.Files.PurchaseOrder.DataSequence.Item>();
                                }
                                file.PurchaseOrders[file.PurchaseOrders.Count - 1].Items.Add(item);
                                item = null;
                            }
                            order = null;
                            break;

                        case "R90_FILETRAILER":
                            Common.Initialize(ref r90);
                            r90.Add((Models.Files.PurchaseOrder.R90_FileTrailer)rec);
                            file.FileTrailerRecord = r90.LastItem();
                            break;
                        }
                    }
                    if (order != null)
                    {
                        file.PurchaseOrders.Add(order);
                        if (item != null)
                        {
                            if (file.PurchaseOrders[file.PurchaseOrders.Count - 1].Items == null)
                            {
                                file.PurchaseOrders[file.PurchaseOrders.Count - 1].Items = new List <Models.Files.PurchaseOrder.DataSequence.Item>();
                            }
                            file.PurchaseOrders[file.PurchaseOrders.Count - 1].Items.Add(item);
                            item = null;
                        }
                        order = null;
                    }
                    using (SQL sql = new SQL(batchnumber, r00, r10, r20, r21, r24, r25, r26, r27, r29, r30, r31, r32, r34, r35, r36, r37, r38, r40, r41, r42, r45, r50, r90)) { savedokay = sql.Successful; }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            return(file);
        }
Ejemplo n.º 37
0
        private Type CustomSelector(MultiRecordEngine e, string recordstring)
        {
            string recordType = recordstring.Substring(0, recordstring.IndexOf(','));
            if (recordType.StartsWith("\""))
                recordType = recordType.Substring(1, recordType.Length - 2);

            Type t;
            if (recordTypes.TryGetValue(recordType, out t))
                return t;

            log.Warn("unable to decode record type {0}", recordType);
            return null;
        }
Ejemplo n.º 38
0
        protected override void Process()
        {
            _monitoring.Notify(Name, 0);
            _atShipmentCostsProduct = PfaAmericaTodayConfiguration.Current.ShipmentCostsProduct;
            _atReturnCostsProduct   = PfaAmericaTodayConfiguration.Current.ReturnCostsProduct;

            _atKialaShipmentCostsProduct = PfaAmericaTodayConfiguration.Current.KialaShipmentCostsProduct;
            _atKialaReturnCostsProduct   = PfaAmericaTodayConfiguration.Current.KialaReturnCostsProduct;

            var config = GetConfiguration();

            _connectorIDs = GetConfiguration().AppSettings.Settings["atConnectorID"].Value.Split(',').Select(int.Parse).ToList();

            var vendorID = int.Parse(config.AppSettings.Settings["ATVendorID"].Value);
            //var connectorID = int.Parse(config.AppSettings.Settings["atConnectorID"].Value);

            var cjpCode = GetConfiguration().AppSettings.Settings["CJPDiscountCode"].Try(c => c.Value, "CJP");

            NetworkExportUtility util = new NetworkExportUtility();

            using (var unit = GetUnitOfWork())
            {
                try
                {
                    _returnCodes = (from c in unit.Scope.Repository <Connector>().GetAll().ToList()
                                    where _connectorIDs.Contains(c.ConnectorID)
                                    select new
                    {
                        c.ConnectorID,
                        Code = c.ConnectorSettings.GetValueByKey <int?>("ReturnCodeOverride", null)
                    }).Where(c => c.Code != null).ToDictionary(p => p.ConnectorID, p => p.Code.Value);

                    var fileLocation = config.AppSettings.Settings["DatColLocationAT"].Value;
                    if (string.IsNullOrEmpty(fileLocation))
                    {
                        throw new Exception("No DatColLocation vendorsetting");
                    }

#if DEBUG
                    fileLocation = @"D:\Concentrator_TESTING";
#endif

                    var userName = config.AppSettings.Settings["DatColLocationUserNameAT"].Value;
                    if (string.IsNullOrEmpty(userName))
                    {
                        throw new Exception("No DatColLocation UserName");
                    }

                    var password = config.AppSettings.Settings["DatColLocationPasswordAT"].Value;
                    if (string.IsNullOrEmpty(password))
                    {
                        throw new Exception("No DatColLocation Password");
                    }

#if !DEBUG
                    fileLocation = util.ConnectorNetworkPath(fileLocation, "M:", userName, password);
#endif
                    var salesSlip   = unit.Scope.Repository <VendorSetting>().GetAll(x => x.SettingKey == "SalesslipNumber" && x.VendorID == vendorID).FirstOrDefault();
                    var salesSlipNr = 0;

                    if (salesSlip == null)
                    {
                        salesSlip = new VendorSetting()
                        {
                            SettingKey = "SalesslipNumber",
                            Value      = salesSlipNr.ToString(),
                            VendorID   = vendorID
                        };
                        unit.Scope.Repository <VendorSetting>().Add(salesSlip);
                    }
                    else
                    {
                        salesSlipNr = int.Parse(salesSlip.Value);

                        if (salesSlipNr == 9999)
                        {
                            salesSlipNr = 0;
                        }
                    }

                    var ledgerRepo = unit.Scope.Repository <OrderLedger>();

                    var timeStamp = DateTime.Now.ToString("yyMMddhhmm");

                    var repositoryOL = unit.Scope.Repository <OrderLine>();

                    foreach (var connector in _connectorIDs)
                    {
                        LoadOrderLines(repositoryOL, connector);
                    }

                    if (!HasOrdersToProcess())
                    {
                        util.DisconnectNetworkPath(fileLocation); //disconnect the path
                        return;                                   //shortcircuit here if there are no orders to process
                    }


                    using (var engine = new MultiRecordEngine(typeof(DatColReceiveRegular), typeof(DatColNormalSales), typeof(DatColReturn)))
                    {
                        var file   = Path.Combine(fileLocation, string.Format("datcol.{0}", timeStamp));
                        var okFile = Path.Combine(fileLocation, string.Format("datcol.{0}.ok", timeStamp));

                        if (!File.Exists(file))
                        {
                            File.Create(file).Dispose();
                        }

                        engine.BeginAppendToFile(file);

                        #region Orders
                        ///contains all order lines
                        linestoProcess.GroupBy(c => c.OrderID).ToList().ForEach(orderLinesCollection =>
                        {
                            string shopOrderNumber  = string.Empty;
                            decimal totalAmount     = 0;
                            DateTime timeStampOrder = DateTime.Now;

                            foreach (var line in orderLinesCollection)
                            {
                                var barcode = line.Product.ProductBarcodes.FirstOrDefault(x => x.BarcodeType.HasValue && x.BarcodeType.Value == 0);
                                var pfaCode = line.Product.ProductBarcodes.Where(c => c.BarcodeType == (int)BarcodeTypes.PFA).FirstOrDefault();
                                var articleSizeColorArray = line.Product.VendorItemNumber.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                                var va = line.Product.VendorAssortments.FirstOrDefault(x => x.VendorID == line.DispatchedToVendorID);

                                var productPriceEnt = va.Try(c => c.VendorPrices.FirstOrDefault(), null);

                                var productPrice = productPriceEnt != null
                  ? va.VendorPrices.FirstOrDefault().Price.Value : (line.Price.HasValue ? Convert.ToDecimal(line.Price.Value) : 0);

                                var specialPrice = (va != null && va.VendorPrices.FirstOrDefault() != null && va.VendorPrices.FirstOrDefault().SpecialPrice.HasValue ? va.VendorPrices.FirstOrDefault().SpecialPrice.Value : 0);

                                var articleCode = string.Empty;
                                var colorCode   = string.Empty;
                                if (articleSizeColorArray.Count() > 0)
                                {
                                    articleCode = articleSizeColorArray[0].PadLeft(13, '0');
                                }
                                if (articleSizeColorArray.Count() > 1)
                                {
                                    colorCode = articleSizeColorArray[1].PadLeft(3, '0');
                                }
                                var sizeCode = (pfaCode != null ? pfaCode.Barcode.PadLeft(4, '0') : string.Empty);

                                if (line.OrderLedgers.Any(c => c.Status == (int)OrderLineStatus.ProcessedKasmut && c.Quantity.Value == line.Quantity))
                                {
                                    continue;
                                }

                                int quantityToProcess = 0;
                                int quantityProcessed = 0;

                                if (line.OrderLedgers.Any(c => c.Status == (int)OrderLineStatus.ProcessedKasmut))
                                {
                                    var ledg          = line.OrderLedgers.FirstOrDefault(c => c.Status == (int)OrderLineStatus.ProcessedKasmut);
                                    quantityToProcess = line.Quantity - ledg.Quantity.Value;
                                    quantityProcessed = ledg.Quantity.Value;
                                }

                                var discount    = DatcolHelper.GetDiscount(line, quantityToProcess);
                                var lineRevenue = DatcolHelper.GetUnformattedRevenue(line, quantityProcessed, quantityToProcess);
                                timeStampOrder  = line.Order.ReceivedDate.ToLocalTime();
                                totalAmount    += (decimal)lineRevenue;
                                shopOrderNumber = getShopNumberByConnector(line.Order.Connector);

                                DatColNormalSales sale = new DatColNormalSales()
                                {
                                    ShopAndPosNr     = string.Format("{0} 01", shopOrderNumber),
                                    SalesslipNumber  = salesSlipNr,
                                    DateStamp        = timeStampOrder,
                                    Quantity         = quantityToProcess == 0 ? line.Quantity : quantityToProcess,
                                    ReceivedFrom     = (int)Math.Round(line.BasePrice.Value * 100),
                                    MarkdownValue    = (int)Math.Round((decimal)(line.BasePrice - line.UnitPrice) * 100),
                                    Discount         = discount,
                                    Revenue          = DatcolHelper.FormatRevenueForDatcol(lineRevenue),
                                    ArticleColorSize = String.Format("{0}{1}{2}", articleCode, colorCode, sizeCode),
                                    Barcode          = barcode != null ? barcode.Barcode : string.Empty,
                                    VatCode          = DatcolHelper.GetBTWCode(articleCode).ToString(),
                                    RecordType       = GetRecordType(line),
                                    FixedField1      = GetDiscountCode(line, cjpCode, discount),
                                    FixedField2      = (int)Math.Round(GetDiscountFromSet(line) * 100),
                                    FixedField3      = GetRecordType(line) == "02" ? "101" : "000"
                                };

                                line.SetStatus(OrderLineStatus.ProcessedExportNotification, ledgerRepo, useStatusOnNonAssortmentItems: true);
                                engine.WriteNext(sale);
                            }
                            DatcolHelper.SaveDatcolLink(orderLinesCollection.First().Order, shopOrderNumber, timeStampOrder, totalAmount, salesSlipNr, "Sales order");
                            DatcolHelper.IncrementSalesSlipNumber(ref salesSlipNr);
                        });

                        _monitoring.Notify(Name, 10);
                        #endregion

                        engine.Flush();

                        salesSlip.Value = salesSlipNr.ToString();

                        unit.Save();

                        #region Cancellations
                        var cancelledStatus = (int)OrderLineStatus.Cancelled;


                        //preliminary : check for cancellation of shipment
                        //if at least one line was cancelled from an order
                        foreach (var order in cancelledLinesToProcess.Select(c => c.Order).Distinct().ToList()) //unit.Scope.Repository<Order>().GetAll(c => cancelLines.Any(l => l.OrderID == c.OrderID)).ToList())
                        {
                            //get its order lines without the ones that are non-assortment
                            var  originalOrderLines = order.OrderLines.Where(c => !c.Product.IsNonAssortmentItem.HasValue || (c.Product.IsNonAssortmentItem.HasValue && !c.Product.IsNonAssortmentItem.Value)).ToList();
                            bool cancelShipmentLine = true; //always include by default the shipment cost

                            var cancelledLines = order.OrderLines.Where(c => c.OrderLedgers.Any(l => l.Status == cancelledStatus)).ToList();

                            if (originalOrderLines.Count() != cancelledLines.Count) //if not all lines have been cancelled -> move on
                            {
                                continue;
                            }

                            foreach (var line in originalOrderLines)
                            {
                                if (!line.OrderLedgers.Any(c => c.Status == cancelledStatus))
                                {
                                    continue;
                                }
                                if (line.OrderLedgers.FirstOrDefault(c => c.Status == cancelledStatus).Quantity != line.Quantity)
                                {
                                    cancelShipmentLine = false;
                                }
                            }

                            if (cancelShipmentLine)
                            {
                                var l = order.OrderLines.Where(c => c.Product.VendorItemNumber == _atShipmentCostsProduct || c.Product.VendorItemNumber == _atKialaShipmentCostsProduct).FirstOrDefault();

                                if (l != null)
                                {
                                    l.SetStatus(OrderLineStatus.Cancelled, unit.Scope.Repository <OrderLedger>(), 1, true);
                                    cancelledLinesToProcess.Add(l);
                                }
                            }
                        }
                        unit.Save();

                        cancelledLinesToProcess.GroupBy(c => c.OrderID).ToList().ForEach(orderLinesCollection =>
                        {
                            decimal totalAmount     = 0;
                            DateTime timeStampOrder = DateTime.Now;
                            string orderShopNumber  = string.Empty;

                            foreach (var line in orderLinesCollection)
                            {
                                var barcode = line.Product.ProductBarcodes.FirstOrDefault(x => x.BarcodeType.HasValue && x.BarcodeType.Value == 0);
                                var pfaCode = line.Product.ProductBarcodes.Where(c => c.BarcodeType == (int)BarcodeTypes.PFA).FirstOrDefault();
                                var articleSizeColorArray = line.Product.VendorItemNumber.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                                var va              = line.Product.VendorAssortments.FirstOrDefault(x => x.VendorID == line.DispatchedToVendorID);
                                var productPrice    = (va != null && va.VendorPrices.FirstOrDefault() != null ? va.VendorPrices.FirstOrDefault().Price.Value : (line.Price.HasValue ? Convert.ToDecimal(line.Price.Value) : 0));
                                var specialPrice    = (va != null && va.VendorPrices.FirstOrDefault() != null && va.VendorPrices.FirstOrDefault().SpecialPrice.HasValue ? va.VendorPrices.FirstOrDefault().SpecialPrice.Value : 0);
                                var productPriceEnt = va.Try(c => c.VendorPrices.FirstOrDefault(), null);
                                var articleCode     = string.Empty;
                                var colorCode       = string.Empty;
                                if (articleSizeColorArray.Count() > 0)
                                {
                                    articleCode = articleSizeColorArray[0].PadLeft(13, '0');
                                }
                                if (articleSizeColorArray.Count() > 1)
                                {
                                    colorCode = articleSizeColorArray[1].PadLeft(3, '0');
                                }
                                var sizeCode = (pfaCode != null ? pfaCode.Barcode.PadLeft(4, '0') : string.Empty);

                                var returnLedger   = line.OrderLedgers.FirstOrDefault(x => x.Status == cancelledStatus);
                                var returnQuantity = (returnLedger != null && returnLedger.Quantity.HasValue) ? returnLedger.Quantity.Value : line.Quantity;
                                DatColReturn sale  = null;
                                var discount       = DatcolHelper.GetDiscount(line, returnQuantity);

                                timeStampOrder  = returnLedger.Try(c => c.LedgerDate, DateTime.Now.ToLocalTime());
                                orderShopNumber = getShopNumberByConnector(line.Order.Connector);
                                var lineRevenue = DatcolHelper.GetUnformatedNegativeRevenue(line, returnQuantity);


                                totalAmount += (decimal)lineRevenue;

                                sale = new DatColReturn()
                                {
                                    ShopAndPosNr     = string.Format("{0} 01", orderShopNumber),
                                    SalesslipNumber  = salesSlipNr,
                                    DateStamp        = timeStampOrder,
                                    Quantity         = -returnQuantity,
                                    ReceivedFrom     = -(int)Math.Round(line.BasePrice.Value * 100),
                                    MarkdownValue    = -(int)Math.Round((decimal)(line.BasePrice - line.UnitPrice) * 100),
                                    Discount         = discount,
                                    Revenue          = DatcolHelper.FormatNegativeRevenueForDatcol(lineRevenue),
                                    ArticleColorSize = String.Format("{0}{1}{2}", articleCode, colorCode, sizeCode),
                                    Barcode          = barcode != null ? barcode.Barcode : string.Empty,
                                    VatCode          = DatcolHelper.GetBTWCode(articleCode).ToString(),
                                    RecordType       = GetRecordType(line),
                                    FixedField1      = GetDiscountCode(line, cjpCode, discount),
                                    FixedField2      = (int)Math.Round(GetDiscountFromSet(line) * 100),
                                    FixedField3      = GetRecordType(line) == "02" ? "101" : "000"
                                };

                                line.SetStatus(OrderLineStatus.ProcessedCancelExportNotification, ledgerRepo, useStatusOnNonAssortmentItems: true);
                                engine.WriteNext(sale);
                            }
                            DatcolHelper.SaveDatcolLink(orderLinesCollection.First().Order, orderShopNumber, timeStampOrder, totalAmount, salesSlipNr, "Cancellation");
                            DatcolHelper.IncrementSalesSlipNumber(ref salesSlipNr);
                            DatcolHelper.SaveDatcolLink(orderLinesCollection.First().Order, orderShopNumber, timeStampOrder, totalAmount, salesSlipNr, "Cancellation");
                        });

                        engine.Flush();
                        _monitoring.Notify(Name, 20);
                        #endregion

                        #region Returns
                        var returnStatus = (int)OrderLineStatus.ProcessedReturnNotification;

                        returnedLinesToProcess.GroupBy(c => c.OrderID).ToList().ForEach(orderLinesCollection =>
                        {
                            decimal totalAmount     = 0;
                            DateTime timeStampOrder = DateTime.Now;
                            string orderShopNumber  = string.Empty;

                            foreach (var line in orderLinesCollection)
                            {
                                var barcode = line.Product.ProductBarcodes.FirstOrDefault(x => x.BarcodeType.HasValue && x.BarcodeType.Value == 0);
                                var pfaCode = line.Product.ProductBarcodes.Where(c => c.BarcodeType == (int)BarcodeTypes.PFA).FirstOrDefault();
                                var articleSizeColorArray = line.Product.VendorItemNumber.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                                var va              = line.Product.VendorAssortments.FirstOrDefault(x => x.VendorID == line.DispatchedToVendorID);
                                var productPrice    = (va != null && va.VendorPrices.FirstOrDefault() != null ? va.VendorPrices.FirstOrDefault().Price.Value : (line.Price.HasValue ? Convert.ToDecimal(line.Price.Value) : 0));
                                var specialPrice    = (va != null && va.VendorPrices.FirstOrDefault() != null && va.VendorPrices.FirstOrDefault().SpecialPrice.HasValue ? va.VendorPrices.FirstOrDefault().SpecialPrice.Value : 0);
                                var productPriceEnt = va.Try(c => c.VendorPrices.FirstOrDefault(), null);
                                var articleCode     = string.Empty;
                                var colorCode       = string.Empty;

                                if (articleSizeColorArray.Count() > 0)
                                {
                                    articleCode = articleSizeColorArray[0].PadLeft(13, '0');
                                }
                                if (articleSizeColorArray.Count() > 1)
                                {
                                    colorCode = articleSizeColorArray[1].PadLeft(3, '0');
                                }
                                var sizeCode = (pfaCode != null ? pfaCode.Barcode.PadLeft(4, '0') : string.Empty);

                                var returnLedger   = line.OrderLedgers.FirstOrDefault(x => x.Status == returnStatus);
                                var returnQuantity = (returnLedger != null && returnLedger.Quantity.HasValue) ? returnLedger.Quantity.Value : line.Quantity;
                                DatColReturn sale  = null;

                                int returnOrComplaintCode = 4;
                                var returnCode            = getFixedReturnCode(line.Order.ConnectorID);
                                if (returnCode.HasValue)
                                {
                                    returnOrComplaintCode = returnCode.Value;
                                }

                                timeStampOrder  = returnLedger.Try(c => c.LedgerDate, DateTime.Now.ToLocalTime());
                                orderShopNumber = getShopNumberByConnector(line.Order.Connector);

                                if (line.Product.VendorItemNumber == _atReturnCostsProduct || line.Product.VendorItemNumber == _atKialaReturnCostsProduct)
                                {
                                    var lineRevenue      = line.Price == 0 ? 0 : (decimal)(line.Price - line.LineDiscount.Try(c => c.Value, 0));
                                    var formattedRevenue = (int)Math.Round(lineRevenue * 100);
                                    totalAmount         += (decimal)lineRevenue;
                                    sale = new DatColReturn()
                                    {
                                        ShopAndPosNr     = string.Format("{0} 01", orderShopNumber),
                                        SalesslipNumber  = salesSlipNr,
                                        DateStamp        = timeStampOrder,
                                        Quantity         = returnQuantity,
                                        ReceivedFrom     = (int)Math.Round(line.BasePrice.Try(c => c.Value, 0) * 100),
                                        MarkdownValue    = 0,
                                        Discount         = line.LineDiscount.HasValue ? (int)Math.Round((line.LineDiscount.Value * 100)) : 0,
                                        Revenue          = formattedRevenue,
                                        ArticleColorSize = String.Format("{0}{1}{2}", articleCode, colorCode, sizeCode),
                                        Barcode          = barcode != null ? barcode.Barcode : string.Empty
                                    };
                                }
                                else
                                {
                                    var lineRevenue = DatcolHelper.GetUnformatedNegativeRevenue(line, returnQuantity);

                                    totalAmount += (decimal)lineRevenue;
                                    var discount = DatcolHelper.GetDiscount(line, returnQuantity);

                                    sale = new DatColReturn()
                                    {
                                        ShopAndPosNr     = string.Format("{0} 01", orderShopNumber),
                                        SalesslipNumber  = salesSlipNr,
                                        DateStamp        = timeStampOrder,
                                        Quantity         = -returnQuantity,
                                        ReceivedFrom     = -(int)Math.Round(line.BasePrice.Value * 100),
                                        MarkdownValue    = -(int)Math.Round((decimal)(line.BasePrice - line.UnitPrice) * 100),
                                        Discount         = discount,
                                        Revenue          = DatcolHelper.FormatNegativeRevenueForDatcol(lineRevenue),
                                        ArticleColorSize = String.Format("{0}{1}{2}", articleCode, colorCode, sizeCode),
                                        Barcode          = barcode != null ? barcode.Barcode : string.Empty,
                                        VatCode          = DatcolHelper.GetBTWCode(articleCode).ToString(),
                                        RecordType       = GetRecordType(line),
                                        FixedField1      = GetDiscountCode(line, cjpCode, discount),
                                        FixedField2      = (int)Math.Round(GetDiscountFromSet(line) * 100),
                                        FixedField3      = GetRecordType(line) == "02" ? "101" : "000",
                                        FixedField6      = returnCode.HasValue ? returnCode.Value.ToString("D2") : "04"
                                    };
                                }
                                line.SetStatus(OrderLineStatus.ProcessedReturnExportNotification, ledgerRepo, useStatusOnNonAssortmentItems: true);
                                engine.WriteNext(sale);
                            }
                            DatcolHelper.SaveDatcolLink(orderLinesCollection.First().Order, orderShopNumber, timeStampOrder, totalAmount, salesSlipNr, "Refund");
                            DatcolHelper.IncrementSalesSlipNumber(ref salesSlipNr);
                        });
                        _monitoring.Notify(Name, 30);
                        #endregion

                        if (!File.Exists(okFile))
                        {
                            File.Create(okFile).Dispose();
                        }

                        engine.Flush();
#if !DEBUG
                        util.DisconnectNetworkPath(fileLocation);
#endif
                    }
                    salesSlip.Value = salesSlipNr.ToString();

                    //add time stamp
                    var vendor = unit.Scope.Repository <Vendor>().GetSingle(c => c.VendorID == vendorID);
                    var datcolTimeStampSetting = vendor.VendorSettings.FirstOrDefault(c => c.SettingKey == "DatcolTimeStamp");

                    if (datcolTimeStampSetting == null)
                    {
                        datcolTimeStampSetting = new VendorSetting()
                        {
                            VendorID   = vendorID,
                            SettingKey = "DatcolTimeStamp"
                        };

                        unit.Scope.Repository <VendorSetting>().Add(datcolTimeStampSetting);
                    }
                    datcolTimeStampSetting.Value = DateTime.Now.ToString();

                    unit.Save();
                    _monitoring.Notify(Name, 1);
                }
                catch (Exception e)
                {
                    log.Debug("Something went wrong with the generation of the DATCOLS ", e);
                    _monitoring.Notify(Name, -1);
                }
            }
        }
Ejemplo n.º 39
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">File reader engine</param>
 internal Parser(MultiRecordEngine engine)
 {
     _engine = engine;
 }
Ejemplo n.º 40
0
        public Models.Files.PurchaseAcknowledgement.DataSequence.V3 ReadFile(string filename, int batchnumber)
        {
            List <Models.Files.PurchaseAcknowledgement.R02_FileHeader>                    r02 = null;
            List <Models.Files.PurchaseAcknowledgement.R11_PurchaseOrderHeader>           r11 = null;
            List <Models.Files.PurchaseAcknowledgement.R21_FreeFormVendor>                r21 = null;
            List <Models.Files.PurchaseAcknowledgement.R30_RecipientShipToNameAndAddress> r30 = null;
            List <Models.Files.PurchaseAcknowledgement.R32_RecipientShipToAdditionalShippingInformation> r32 = null;
            List <Models.Files.PurchaseAcknowledgement.R34_RecipientShipToCityStateAndZip> r34 = null;
            List <Models.Files.PurchaseAcknowledgement.R40_LineItem>                   r40     = null;
            List <Models.Files.PurchaseAcknowledgement.R41_AdditionalDetail>           r41     = null;
            List <Models.Files.PurchaseAcknowledgement.R42_AdditionalLineItem>         r42     = null;
            List <Models.Files.PurchaseAcknowledgement.R43_AdditionalLineItem>         r43     = null;
            List <Models.Files.PurchaseAcknowledgement.R44_ItemNumberOrPrice>          r44     = null;
            List <Models.Files.PurchaseAcknowledgement.R59_PurchaseOrderControlTotals> r59     = null;
            List <Models.Files.PurchaseAcknowledgement.R91_FileTrailer>                r91     = null;

            //
            Models.Files.PurchaseAcknowledgement.DataSequence.V3       file = null;
            Models.Files.PurchaseAcknowledgement.DataSequence.LineItem item = null;
            //
            string typename  = string.Empty;
            int    itemCount = 0;
            bool   savedokay = false;

            try
            {
                MultiRecordEngine engine = new MultiRecordEngine
                                           (
                    typeof(Models.Files.PurchaseAcknowledgement.R02_FileHeader),
                    typeof(Models.Files.PurchaseAcknowledgement.R11_PurchaseOrderHeader),
                    typeof(Models.Files.PurchaseAcknowledgement.R21_FreeFormVendor),
                    typeof(Models.Files.PurchaseAcknowledgement.R30_RecipientShipToNameAndAddress),
                    typeof(Models.Files.PurchaseAcknowledgement.R32_RecipientShipToAdditionalShippingInformation),
                    typeof(Models.Files.PurchaseAcknowledgement.R34_RecipientShipToCityStateAndZip),
                    typeof(Models.Files.PurchaseAcknowledgement.R40_LineItem),
                    typeof(Models.Files.PurchaseAcknowledgement.R41_AdditionalDetail),
                    typeof(Models.Files.PurchaseAcknowledgement.R42_AdditionalLineItem),
                    typeof(Models.Files.PurchaseAcknowledgement.R43_AdditionalLineItem),
                    typeof(Models.Files.PurchaseAcknowledgement.R44_ItemNumberOrPrice),
                    typeof(Models.Files.PurchaseAcknowledgement.R59_PurchaseOrderControlTotals),
                    typeof(Models.Files.PurchaseAcknowledgement.R91_FileTrailer)
                                           )
                {
                    RecordSelector = new RecordTypeSelector(Models.Files.PurchaseAcknowledgement.Selectors.V3.Custom)
                };


                var res = engine.ReadFile(filename);
                if (res != null && res.Length > 0)
                {
                    file = new Models.Files.PurchaseAcknowledgement.DataSequence.V3();

                    foreach (var rec in res)
                    {
                        typename = rec.GetType().Name.ToUpper();
                        switch (typename)
                        {
                        case "R02_FILEHEADER":
                            Common.Initialize(ref r02);
                            r02.Add((Models.Files.PurchaseAcknowledgement.R02_FileHeader)rec);
                            file.FileHeaderRecord = r02.LastItem();
                            break;

                        case "R11_PURCHASEORDERHEADER":
                            Common.Initialize(ref r11);
                            r11.Add((Models.Files.PurchaseAcknowledgement.R11_PurchaseOrderHeader)rec);
                            file.PurchaseOrderHeaderRecord = r11.LastItem();
                            break;

                        case "R21_FREEFORMVENDOR":
                            Common.Initialize(ref r21);
                            r21.Add((Models.Files.PurchaseAcknowledgement.R21_FreeFormVendor)rec);
                            if (file.FreeFormVendor == null)
                            {
                                file.FreeFormVendor = new List <Models.Files.PurchaseAcknowledgement.R21_FreeFormVendor>();
                            }
                            if (file.FreeFormVendor.Count < file.Maxes[typename])
                            {
                                file.FreeFormVendor.Add(r21.LastItem());
                            }
                            break;

                        case "R30_RECIPIENTSHIPTONAMEANDADDRESS":
                            Common.Initialize(ref r30);
                            r30.Add((Models.Files.PurchaseAcknowledgement.R30_RecipientShipToNameAndAddress)rec);
                            file.RecipShipToNameAndAddressRecord = r30.LastItem();
                            break;

                        case "R32_RECIPIENTSHIPTOADDITIONALSHIPPINGINFORMATION":
                            Common.Initialize(ref r32);
                            r32.Add((Models.Files.PurchaseAcknowledgement.R32_RecipientShipToAdditionalShippingInformation)rec);
                            if (file.RecipShipToAdditionalShippingInfo == null)
                            {
                                file.RecipShipToAdditionalShippingInfo = new List <Models.Files.PurchaseAcknowledgement.R32_RecipientShipToAdditionalShippingInformation>();
                            }
                            if (file.RecipShipToAdditionalShippingInfo.Count < file.Maxes[typename])
                            {
                                file.RecipShipToAdditionalShippingInfo.Add(r32.LastItem());
                            }
                            break;

                        case "R34_RECIPIENTSHIPTOCITYSTATEANDZIP":
                            Common.Initialize(ref r34);
                            r34.Add((Models.Files.PurchaseAcknowledgement.R34_RecipientShipToCityStateAndZip)rec);
                            file.RecipShipToCityStateAndZipRecord = r34.LastItem();
                            break;

                        case "R40_LINEITEM":
                            Common.Initialize(ref r40);
                            r40.Add((Models.Files.PurchaseAcknowledgement.R40_LineItem)rec);
                            if (itemCount > 0)
                            {
                                if (item != null)
                                {
                                    file.LineItems.Add(item);
                                    item = null;
                                }
                            }
                            if (file.LineItems == null)
                            {
                                file.LineItems = new List <Models.Files.PurchaseAcknowledgement.DataSequence.LineItem>();
                            }
                            item = new Models.Files.PurchaseAcknowledgement.DataSequence.LineItem();
                            itemCount++;
                            item.LineItemRecord = r40.LastItem();
                            break;

                        case "R41_ADDITIONALDETAIL":
                            Common.Initialize(ref r41);
                            r41.Add((Models.Files.PurchaseAcknowledgement.R41_AdditionalDetail)rec);
                            item.AdditionalDetailRecord = r41.LastItem();
                            break;

                        case "R42_ADDITIONALLINEITEM":
                            Common.Initialize(ref r42);
                            r42.Add((Models.Files.PurchaseAcknowledgement.R42_AdditionalLineItem)rec);
                            item.AddtionalLineItemTitleRecord = r42.LastItem();
                            break;

                        case "R43_ADDITIONALLINEITEM":
                            Common.Initialize(ref r43);
                            r43.Add((Models.Files.PurchaseAcknowledgement.R43_AdditionalLineItem)rec);
                            item.AdditionalLineItemPublisherRecord = r43.LastItem();
                            break;

                        case "R44_ITEMNUMBERORPRICE":
                            Common.Initialize(ref r44);
                            r44.Add((Models.Files.PurchaseAcknowledgement.R44_ItemNumberOrPrice)rec);
                            item.ItemNumberOrPriceRecord = r44.LastItem();
                            break;

                        case "R59_PURCHASEORDERCONTROLTOTALS":
                            Common.Initialize(ref r59);
                            r59.Add((Models.Files.PurchaseAcknowledgement.R59_PurchaseOrderControlTotals)rec);
                            file.PurchaseOrderControlTotalsRecord = r59.LastItem();
                            break;

                        case "R91_FILETRAILER":
                            Common.Initialize(ref r91);
                            r91.Add((Models.Files.PurchaseAcknowledgement.R91_FileTrailer)rec);
                            file.FileTrailerRecord = r91.LastItem();
                            break;
                        }
                    }
                    if (item != null)
                    {
                        file.LineItems.Add(item);
                        item      = null;
                        itemCount = 0;
                    }
                    using (SQL sql = new SQL(batchnumber, r02, r11, r21, r30, r32, r34, r40, r41, r42, r43, r44, r59, r91)) { savedokay = sql.Successful; }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            return(file);
        }
Ejemplo n.º 41
0
		public void NullTypes()
		{
			engine = new MultiRecordEngine(typeof(CustomersVerticalBar), null);
			engine.RecordSelector = new RecordTypeSelector(CustomSelector);
		}
Ejemplo n.º 42
0
        public bool WriteFile(string filename, Models.Files.Invoice.DataSequence.V3 data)
        {
            List <object> writelist = new List <object>();
            List <(string code, Type type)> used = new List <(string code, Type type)>();
            bool success = false;

            try
            {
                //build list
                writelist.Add(data.InvoiceFileHeaderRecord);
                //++if((from u in used where u.code == data.InvoiceFileHeaderRecord.InvoiceFileHeader select u.code).Count() == 0) { used.Add((data.InvoiceFileHeaderRecord.InvoiceFileHeader,typeof(Models.Files.Invoice.R01_InvoiceFileHeader)); }
                if (data.Invoices != null && data.Invoices.Count > 0)
                {
                    foreach (Models.Files.Invoice.DataSequence.InvoiceItem item in data.Invoices)
                    {
                        if (Common.IsValid(item.InvoiceHeaderRecord))
                        {
                            writelist.Add(item.InvoiceHeaderRecord);
                        }
                        if (Common.IsValid(item.InvoiceVendorDetailRecord))
                        {
                            writelist.Add(item.InvoiceVendorDetailRecord);
                        }
                        foreach (Models.Files.Invoice.DataSequence.InvoiceDetail detail in item.InvoiceDetails)
                        {
                            if (Common.IsValid(detail.InvoiceDetailRecord))
                            {
                                writelist.Add(detail.InvoiceDetailRecord);
                            }
                            if (Common.IsValid(detail.DetailISBN13OrEANRecord))
                            {
                                writelist.Add(detail.DetailISBN13OrEANRecord);
                            }
                            if (Common.IsValid(detail.DetailTotalRecord))
                            {
                                writelist.Add(detail.DetailTotalRecord);
                            }
                        }
                        if (Common.IsValid(item.InvoiceTotalRecord))
                        {
                            writelist.Add(item.InvoiceTotalRecord);
                        }
                        if (Common.IsValid(item.InvoiceTrailerRecord))
                        {
                            writelist.Add(item.InvoiceTrailerRecord);
                        }
                    }
                }
                if (Common.IsValid(data.InvoiceFileTrailer, false))
                {
                    writelist.Add(data.InvoiceFileTrailer);
                }
                MultiRecordEngine engine = new MultiRecordEngine
                                           (
                    typeof(Models.Files.Invoice.R01_InvoiceFileHeader),
                    typeof(Models.Files.Invoice.R15_InvoiceHeader),
                    typeof(Models.Files.Invoice.R16_InvoiceVendorDetail),
                    typeof(Models.Files.Invoice.R45_InvoiceDetail),
                    typeof(Models.Files.Invoice.R46_DetailISBN13OrEAN),
                    typeof(Models.Files.Invoice.R48_DetailTotal),
                    typeof(Models.Files.Invoice.R55_InvoiceTotals),
                    typeof(Models.Files.Invoice.R57_InvoiceTrailer),
                    typeof(Models.Files.Invoice.R95_InvoiceFileTrailer)
                                           )
                {
                    RecordSelector = new RecordTypeSelector(Models.Files.Invoice.Selectors.V3.Custom)
                };
                engine.WriteFile(filename, writelist.ToArray());
                success = true;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                success = false;
            }
            return(success);
        }
Ejemplo n.º 43
0
        public Models.Files.PurchaseOrder.DataSequence.V3 ReadFile(string filename, int batchnumber)
        {
            List <Models.Files.PurchaseOrder.R00_ClientFileHeader> r00 = null;
            List <Models.Files.PurchaseOrder.R10_ClientHeader>     r10 = null;
            List <Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions> r20 = null;
            List <Models.Files.PurchaseOrder.R21_PurchaseOrderOptions>             r21 = null;
            List <Models.Files.PurchaseOrder.R40_LineItemDetail>           r40         = null;
            List <Models.Files.PurchaseOrder.R41_AdditionalLineItemDetail> r41         = null;
            List <Models.Files.PurchaseOrder.R45_Imprint>              r45             = null;
            List <Models.Files.PurchaseOrder.R46_StickerBarcodeData>   r46barcode      = null;
            List <Models.Files.PurchaseOrder.R46_StickerTextLines>     r46text         = null;
            List <Models.Files.PurchaseOrder.R50_PurchaseOrderTrailer> r50             = null;
            List <Models.Files.PurchaseOrder.R90_FileTrailer>          r90             = null;

            //
            Models.Files.PurchaseOrder.DataSequence.V3                  file        = null;
            Models.Files.PurchaseOrder.DataSequence.PurchaseOrder       order       = null;
            Models.Files.PurchaseOrder.DataSequence.PurchaseOrderDetail orderdetail = null;
            //
            string typename         = string.Empty;
            int    orderdetailCount = 0;
            int    orderCount       = 0;
            bool   savedokay        = false;

            try
            {
                MultiRecordEngine engine = new MultiRecordEngine
                                           (
                    typeof(Models.Files.PurchaseOrder.R00_ClientFileHeader),
                    typeof(Models.Files.PurchaseOrder.R10_ClientHeader),
                    typeof(Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions),
                    typeof(Models.Files.PurchaseOrder.R21_PurchaseOrderOptions),
                    typeof(Models.Files.PurchaseOrder.R40_LineItemDetail),
                    typeof(Models.Files.PurchaseOrder.R41_AdditionalLineItemDetail),
                    typeof(Models.Files.PurchaseOrder.R45_Imprint),
                    typeof(Models.Files.PurchaseOrder.R46_StickerBarcodeData),
                    typeof(Models.Files.PurchaseOrder.R46_StickerTextLines),
                    typeof(Models.Files.PurchaseOrder.R50_PurchaseOrderTrailer),
                    typeof(Models.Files.PurchaseOrder.R90_FileTrailer)
                                           )
                {
                    RecordSelector = new RecordTypeSelector(Models.Files.PurchaseOrder.Selectors.V3.Custom)
                };

                var res = engine.ReadFile(filename);
                if (res != null && res.Length > 0)
                {
                    file = new Models.Files.PurchaseOrder.DataSequence.V3();
                    foreach (var rec in res)
                    {
                        typename = rec.GetType().Name.ToUpper();
                        switch (typename)
                        {
                        case "R00_CLIENTFILEHEADER":
                            Common.Initialize(ref r00);
                            r00.Add((Models.Files.PurchaseOrder.R00_ClientFileHeader)rec);
                            file.FileHeaderRecord = r00.LastItem();
                            break;

                        case "R10_CLIENTHEADER":
                            Common.Initialize(ref r10);
                            r10.Add((Models.Files.PurchaseOrder.R10_ClientHeader)rec);
                            if (orderCount > 0)
                            {
                                if (file.PurchaseOrders == null)
                                {
                                    file.PurchaseOrders = new List <Models.Files.PurchaseOrder.DataSequence.PurchaseOrder>();
                                }
                                if (order != null)
                                {
                                    file.PurchaseOrders.Add(order);
                                }
                            }
                            orderCount++;
                            order = new Models.Files.PurchaseOrder.DataSequence.PurchaseOrder
                            {
                                ClientHeaderRecord = r10.LastItem()
                            };
                            break;

                        case "R20_FIXEDSPECIALHANDLINGINSTRUCTIONS":
                            Common.Initialize(ref r20);
                            r20.Add((Models.Files.PurchaseOrder.R20_FixedSpecialHandlingInstructions)rec);
                            order.FixedHandlingInstructionsRecord = r20.LastItem();
                            break;

                        case "R21_PURCHASEORDEROPTIONS":
                            Common.Initialize(ref r21);
                            r21.Add((Models.Files.PurchaseOrder.R21_PurchaseOrderOptions)rec);
                            order.PurchaseOrderOptionsRecord = r21.LastItem();
                            break;

                        case "R40_LINEITEMDETAIL":
                            Common.Initialize(ref r40);
                            r40.Add((Models.Files.PurchaseOrder.R40_LineItemDetail)rec);
                            if (orderdetailCount > 0)
                            {
                                if (order.PurchaseOrderDetails == null)
                                {
                                    order.PurchaseOrderDetails = new List <Models.Files.PurchaseOrder.DataSequence.PurchaseOrderDetail>();
                                }
                                if (orderdetail != null)
                                {
                                    order.PurchaseOrderDetails.Add(orderdetail);
                                }
                            }
                            orderdetailCount++;
                            orderdetail = new Models.Files.PurchaseOrder.DataSequence.PurchaseOrderDetail
                            {
                                LineItemDetail = r40.LastItem()
                            };
                            break;

                        case "R41_ADDITIONALLINEITEMDETAIL":
                            Common.Initialize(ref r41);
                            r41.Add((Models.Files.PurchaseOrder.R41_AdditionalLineItemDetail)rec);
                            orderdetail.AdditionalLineItemDetail = r41.LastItem();
                            break;

                        case "R45_IMPRINT":
                            Common.Initialize(ref r45);
                            r45.Add((Models.Files.PurchaseOrder.R45_Imprint)rec);
                            if (orderdetail.Imprint == null)
                            {
                                orderdetail.Imprint = new List <Models.Files.PurchaseOrder.R45_Imprint>();
                            }
                            if (file.Maxes.ContainsKey(typename) && orderdetail.Imprint.Count < file.Maxes[typename])
                            {
                                orderdetail.Imprint.Add(r45.LastItem());
                            }
                            break;

                        case "R46_STICKERBARCODEDATA":
                            Common.Initialize(ref r46barcode);
                            r46barcode.Add((Models.Files.PurchaseOrder.R46_StickerBarcodeData)rec);
                            orderdetail.StickerBarcodeDataRecord = r46barcode.LastItem();
                            break;

                        case "R46_STICKERTEXTLINES":
                            Common.Initialize(ref r46text);
                            r46text.Add((Models.Files.PurchaseOrder.R46_StickerTextLines)rec);
                            if (orderdetail.StickerTextLines == null)
                            {
                                orderdetail.StickerTextLines = new List <Models.Files.PurchaseOrder.R46_StickerTextLines>();
                            }
                            if (file.Maxes.ContainsKey(typename) && orderdetail.StickerTextLines.Count < file.Maxes[typename])
                            {
                                orderdetail.StickerTextLines.Add(r46text.LastItem());
                            }
                            break;

                        case "R50_PURCHASEORDERTRAILER":
                            Common.Initialize(ref r50);
                            r50.Add((Models.Files.PurchaseOrder.R50_PurchaseOrderTrailer)rec);
                            file.PurchaseOrderTrailerRecord = r50.LastItem();
                            if (orderdetail != null)
                            {
                                if (order.PurchaseOrderDetails == null)
                                {
                                    order.PurchaseOrderDetails = new List <Models.Files.PurchaseOrder.DataSequence.PurchaseOrderDetail>();
                                }
                                order.PurchaseOrderDetails.Add(orderdetail);
                            }
                            file.PurchaseOrders.Add(order);
                            break;

                        case "R90_FILETRAILER":
                            Common.Initialize(ref r90);
                            r90.Add((Models.Files.PurchaseOrder.R90_FileTrailer)rec);
                            file.FileTrailerRecord = r90.LastItem();
                            break;
                        }
                    }
                    using (SQL sql = new SQL(batchnumber, r00, r10, r20, r21, r40, r41, r45, r46barcode, r46text, r50, r90)) { savedokay = sql.Successful; }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            return(file);
        }
Ejemplo n.º 44
0
 Type CustomSelectorReturningBadType(MultiRecordEngine engine, string record)
 {
     return typeof (String);
 }
Ejemplo n.º 45
0
        public static Type Custom(MultiRecordEngine engine, string recordLine)
        {
            Console.WriteLine(recordLine);
            Type type = null;

            switch (recordLine.Substring(0, 2))
            {
            case "00":
                type = typeof(R00_ClientFileHeader);
                break;

            case "10":
                type = typeof(R10_ClientHeader);
                break;

            case "20":
                type = typeof(R20_FixedSpecialHandlingInstructions);
                break;

            case "21":
                type = typeof(R21_PurchaseOrderOptions);
                break;

            case "40":
                type = typeof(R40_LineItemDetail);
                break;

            case "41":
                type = typeof(R41_AdditionalLineItemDetail);
                break;

            case "45":
                type = typeof(R45_Imprint);
                break;

            case "46":
                List <string> barcodeformat = new List <string>()
                {
                    "UP",
                    "EN",
                    "ZZ",
                    "SK"
                };
                if ((from f in barcodeformat.AsEnumerable() where f.Contains(recordLine.Substring(29, 2)) select f).Count() > 0)
                {
                    // Sticker Barcode data
                    type = typeof(R46_StickerBarcodeData);
                }
                else
                {
                    type = typeof(R46_StickerTextLines);
                }
                break;

            case "50":
                type = typeof(R50_PurchaseOrderTrailer);
                break;

            case "90":
                type = typeof(R90_FileTrailer);
                break;
            }
            return(type);
        }
Ejemplo n.º 46
0
 public void NoSelector()
 {
     engine = new MultiRecordEngine(typeof(CustomersVerticalBar), typeof(CustomersTab));
 }
Ejemplo n.º 47
0
        private void WriteOrders(IEnumerable <OrderLine> orderLines, WebOrderProcessType processType, OrderLineStatus newStatus, string ilnClientNumber)
        {
            using (var engine = new MultiRecordEngine(typeof(DatColEnvelope), typeof(DatColHeader), typeof(DatColDate),
                                                      typeof(DatColOrderLine), typeof(DatColCount)))
            {
                orderLines.GroupBy(c => c.OrderID).ToList().ForEach(orderLinesCollection =>
                {
                    using (Stream memoryStream = new MemoryStream())
                        using (var streamWriter = new StreamWriter(memoryStream))
                        {
                            var saveOrder       = true;
                            _magentoOrderNumber = orderLinesCollection.First().Order.WebSiteOrderNumber;

                            engine.BeginWriteStream(streamWriter);

                            var magentoOrderNumber = orderLinesCollection.First().Order.WebSiteOrderNumber;

                            var envelope = new DatColEnvelope
                            {
                                ILNClientNumber    = ilnClientNumber,
                                ILNSapphNumber     = ILNSapphNumber,
                                MagentoOrderNumber = magentoOrderNumber
                            };
                            engine.WriteNext(envelope);

                            var header = new DatColHeader
                            {
                                MagentoOrderNumber = magentoOrderNumber,
                                ILNSapphNumber     = ILNSapphNumber,
                                ILNClientNumber    = ilnClientNumber,
                                ILNClientNumber2   = ilnClientNumber
                            };
                            engine.WriteNext(header);

                            var date = new DatColDate();
                            engine.WriteNext(date);

                            var orderLineCounter = 0;
                            foreach (var line in orderLinesCollection)
                            {
                                if (line.Product == null)
                                {
                                    saveOrder = false;
                                    continue;
                                }

                                var barcode = line.Product.ProductBarcodes.Where(x => x.BarcodeType.HasValue && x.BarcodeType.Value == 0).Select(x => x).FirstOrDefault();

                                if (barcode == null)
                                {
                                    saveOrder = false;
                                    continue;
                                }

                                decimal totalUnitPriceToProcess;
                                var quantityToProcess = 0;

                                switch (processType)
                                {
                                case WebOrderProcessType.WebOrder:
                                    if (!line.Price.HasValue)
                                    {
                                        throw new ArgumentNullException();
                                    }

                                    var discount = line.LineDiscount.HasValue ? line.LineDiscount.Value : 0;

                                    if (line.ProductID == _shipmentCostProductID)
                                    {
                                        totalUnitPriceToProcess = (decimal)(line.Price);
                                    }
                                    else
                                    {
                                        totalUnitPriceToProcess = (decimal)(line.Price.Value - discount);
                                    }

                                    if (line.OrderLedgers.Any(c => c.Status == (int)OrderLineStatus.ProcessedKasmut))
                                    {
                                        var ledg = line.OrderLedgers.FirstOrDefault(c => c.Status == (int)OrderLineStatus.ProcessedKasmut);
                                        if (ledg != null)
                                        {
                                            if (ledg.Quantity != null)
                                            {
                                                quantityToProcess = line.Quantity - ledg.Quantity.Value;
                                            }
                                        }
                                    }
                                    break;

                                case WebOrderProcessType.CancellationWebOrder:
                                    if (line.ProductID == _returnCostProductID)
                                    {
                                        quantityToProcess       = line.Quantity;
                                        totalUnitPriceToProcess = (decimal)(line.UnitPrice.HasValue ? line.UnitPrice.Value : 0);
                                    }
                                    else
                                    {
                                        var returnLedger  = line.OrderLedgers.FirstOrDefault(x => x.Status == CancelledStatus);
                                        quantityToProcess =
                                            -((returnLedger != null && returnLedger.Quantity.HasValue)
                            ? returnLedger.Quantity.Value
                            : line.Quantity);
                                        totalUnitPriceToProcess = (decimal)(Math.Abs(quantityToProcess) * line.UnitPrice);
                                    }
                                    break;

                                case WebOrderProcessType.ReturnedWebOrder:
                                    if (line.ProductID == _returnCostProductID)
                                    {
                                        quantityToProcess       = line.Quantity;
                                        totalUnitPriceToProcess = (decimal)(line.BasePrice.HasValue ? line.BasePrice.Value : 0);
                                    }
                                    else
                                    {
                                        // if product not ReturnCost
                                        //    Quantity = Returned Quantity (if this not exists)
                                        //               Shipped Quantity
                                        //    Price = Paid price per Product (with discount) * Quantity

                                        var returnLedger  = line.OrderLedgers.FirstOrDefault(x => x.Status == ReturnStatus);
                                        quantityToProcess =
                                            -((returnLedger != null && returnLedger.Quantity.HasValue)
                            ? returnLedger.Quantity.Value
                            : line.Quantity);
                                        totalUnitPriceToProcess = (decimal)(Math.Abs(quantityToProcess) * (line.Price / line.Quantity));
                                    }

                                    break;

                                default:
                                    throw new NotImplementedException();
                                }

                                var orderLine = new DatColOrderLine
                                {
                                    OrderLineNumber = ++orderLineCounter,
                                    Barcode         = barcode.Barcode,
                                    Quantity        = quantityToProcess == 0 ? line.Quantity : quantityToProcess,
                                    TotalUnitPrice  = totalUnitPriceToProcess
                                };
                                engine.WriteNext(orderLine);
                            }
                            var count = new DatColCount
                            {
                                TotalOrderLine = orderLinesCollection.Count(),
                                TotalQuantity  = 0
                            };
                            engine.WriteNext(count);

                            engine.Flush();

                            streamWriter.Flush();

                            string webOrderFile;
                            switch (processType)
                            {
                            case WebOrderProcessType.WebOrder:
                                webOrderFile = WebOrderFileName;
                                break;

                            case WebOrderProcessType.CancellationWebOrder:
                            case WebOrderProcessType.ReturnedWebOrder:
                                webOrderFile = ReturnWebOrderFileName;
                                break;

                            default:
                                throw new NotImplementedException();
                            }

                            if (saveOrder)
                            {
                                var listOfOrderLines = orderLinesCollection.ToDictionary <OrderLine, int, int?>(line => line.OrderLineID, line => null);

                                if (!_orderRepo.UpgradeOrderLinesStatus(listOfOrderLines, newStatus, true))
                                {
                                    _log.Info(string.Format("The system can not upgrade the status of order line {0} to {1}", listOfOrderLines.Keys, newStatus));
                                }
                                else
                                {
                                    var ftpManager = new FtpManager(_ftpSetting.FtpUri, null, false, true);
                                    ftpManager.Upload(memoryStream.Reset(), webOrderFile);
                                }
                            }
                            else
                            {
                                //todo: log corrupt lines
                            }
                        }
                });
            }
        }
Ejemplo n.º 48
0
		public void NoTypes()
		{
			engine = new MultiRecordEngine(new Type[] {});
		}
Ejemplo n.º 49
0
		public void NullTypeArray()
		{
			engine = new MultiRecordEngine((Type[])null);
		}
Ejemplo n.º 50
0
        public void WhenSelectorReturnsTypeThatIsNotInEngine_ShouldThrowBadUsageException_WhenReadingRecordAtATime()
        {
            engine = new MultiRecordEngine(new RecordTypeSelector(CustomSelectorReturningBadType),
                                           typeof(OrdersVerticalBar), typeof(CustomersSemiColon), typeof(SampleType));

            engine.BeginReadFile(FileTest.Good.MultiRecord1.Path);

            Assert.Throws<BadUsageException>(() => engine.ReadNext());
        }
Ejemplo n.º 51
0
		public void OneType()
		{
			engine = new MultiRecordEngine(typeof(CustomersVerticalBar));
		}
Ejemplo n.º 52
0
        public static Type Custom(MultiRecordEngine engine, string recordLine)
        {
            Console.WriteLine(recordLine);
            Type type = null;

            switch (recordLine.Substring(0, 2))
            {
            case "00":
                type = typeof(R00_FileHeader);
                break;

            case "10":
                type = typeof(R10_ClientHeader);
                break;

            case "20":
                type = typeof(R20_FixedSpecialHandlingInstructions);
                break;

            case "21":
                type = typeof(R21_PurchaseOrderOptions);
                break;

            case "24":
                type = typeof(R24_CustomerCost);
                break;

            case "25":
                type = typeof(R25_CustomerBillToName);
                break;

            case "26":
                type = typeof(R26_CustomerBillToPhoneNumber);
                break;

            case "27":
                type = typeof(R27_CustomerBillToAddressLine);
                break;

            case "29":
                type = typeof(R29_CustomerBillToCityStateZip);
                break;

            case "30":
                type = typeof(R30_RecipientShipToName);
                break;

            case "31":
                type = typeof(R31_RecipientShipToPhone);
                break;

            case "32":
                type = typeof(R32_ShippingRecordRecipientAddressLine);
                break;

            case "34":
                type = typeof(R34_RecipientShippingRecordCityStateZip);
                break;

            case "35":
                type = typeof(R35_DropShipDetail);
                break;

            case "36":
                type = typeof(R36_SpecialDeliveryInstructions);
                break;

            case "37":
                type = typeof(R37_MarketingMessage);
                break;

            case "38":
                type = typeof(R38_GiftMessage);
                break;

            case "40":
                type = typeof(R40_LineItem);
                break;

            case "41":
                type = typeof(R41_AdditionalLineItem);
                break;

            case "42":
                type = typeof(R42_LineItemGiftMessage);
                break;

            case "45":
                type = typeof(R45_Imprint);
                break;

            case "50":
                type = typeof(R50_PurchaseOrderControl);
                break;

            case "90":
                type = typeof(R90_FileTrailer);
                break;
            }
            return(type);
        }
Ejemplo n.º 53
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="engine">File reader engine</param>
 internal StationParser(MultiRecordEngine engine)
 {
     _engine = engine;
 }
Ejemplo n.º 54
0
        protected override void Process()
        {
            try
            {
                var config = GetConfiguration();

                NetworkExportUtility util = new NetworkExportUtility();
                using (var unit = GetUnitOfWork())
                {
                    var fileLocation = config.AppSettings.Settings["DatColLocation"].Value;

                    if (string.IsNullOrEmpty(fileLocation))
                    {
                        throw new Exception("No DatColLocation vendorsetting");
                    }

                    var userName = config.AppSettings.Settings["DatColLocationUserName"].Value;
                    if (string.IsNullOrEmpty(userName))
                    {
                        throw new Exception("No DatColLocation UserName");
                    }

                    var password = config.AppSettings.Settings["DatColLocationPassword"].Value;
                    if (string.IsNullOrEmpty(password))
                    {
                        throw new Exception("No DatColLocation Password");
                    }

                    fileLocation = util.ConnectorNetworkPath(fileLocation, "Z:", userName, password);

                    var vendorID = int.Parse(config.AppSettings.Settings["ccVendorID"].Value);


#if DEBUG
                    fileLocation = @"E:\Concentrator_TESTING";
#endif

                    var ledgerRepo = unit.Scope.Repository <OrderLedger>();

                    using (var engine = new MultiRecordEngine(typeof(DatColTransfer), typeof(DatColNormalSales)))
                    {
                        var file = Path.Combine(fileLocation, "datcol");


                        if (!File.Exists(file))
                        {
                            File.Create(file).Dispose();
                        }

                        engine.BeginAppendToFile(file);

                        #region Orders
                        var orderlinesReady  = unit.Scope.Repository <OrderLine>().GetAll(x => x.isDispatched && x.OrderLedgers.Any(y => y.Status == (int)OrderLineStatus.ReadyToOrder) && x.Order.PaymentTermsCode == "Shop").ToList();
                        var orderlinesExport = unit.Scope.Repository <OrderLine>().GetAll(x => x.isDispatched && x.OrderLedgers.Any(y => y.Status == (int)OrderLineStatus.ProcessedExportNotification && x.Order.PaymentTermsCode == "Shop")).ToList();

                        var lines = orderlinesReady.Except(orderlinesExport).ToList();

                        lines.GroupBy(c => c.OrderID).ToList().ForEach(orderLinesCollection =>
                        {
                            var order = unit.Scope.Repository <Order>().GetSingle(c => c.OrderID == orderLinesCollection.Key);

                            var salesSlipNr = order.WebSiteOrderNumber.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries)[1];
                            int counter     = 1;
                            foreach (var line in orderLinesCollection)
                            {
                                var barcode = line.Product.ProductBarcodes.FirstOrDefault(x => x.BarcodeType.HasValue && x.BarcodeType.Value == 0);
                                var pfaCode = line.Product.ProductBarcodes.Where(c => c.BarcodeType == (int)BarcodeTypes.PFA).FirstOrDefault();
                                var articleSizeColorArray = line.Product.VendorItemNumber.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                                var va           = line.Product.VendorAssortments.FirstOrDefault(x => x.VendorID == line.DispatchedToVendorID);
                                var productPrice = (va != null && va.VendorPrices.FirstOrDefault() != null ? va.VendorPrices.FirstOrDefault().Price.Value : (line.Price.HasValue ? Convert.ToDecimal(line.Price.Value) : 0));
                                var specialPrice = (va != null && va.VendorPrices.FirstOrDefault() != null && va.VendorPrices.FirstOrDefault().SpecialPrice.HasValue ? va.VendorPrices.FirstOrDefault().SpecialPrice.Value : 0);

                                var articleCode = string.Empty;
                                var colorCode   = string.Empty;
                                if (articleSizeColorArray.Count() > 0)
                                {
                                    articleCode = articleSizeColorArray[0].PadLeft(13, '0');
                                }
                                if (articleSizeColorArray.Count() > 1)
                                {
                                    colorCode = articleSizeColorArray[1].PadLeft(3, '0');
                                }
                                var sizeCode = (pfaCode != null ? pfaCode.Barcode.PadLeft(4, '0') : string.Empty);

                                var shopNumber = line.Order.ShippedToCustomer.CompanyName.Replace("X", string.Empty);

                                DatColTransfer sale = new DatColTransfer()
                                {
                                    ShopAndPosNr        = string.Format("{0} 01", shopNumber),
                                    SalesslipNumber     = int.Parse(salesSlipNr),
                                    DateStamp           = DateTime.Now,
                                    Quantity            = line.Quantity,
                                    ReceivedFrom        = 890,
                                    TransferNumber      = string.Format("00{0}{1}", shopNumber, salesSlipNr),
                                    ArticleColorSize    = String.Format("{0}{1}{2}", articleCode, colorCode, sizeCode),
                                    Barcode             = barcode != null ? barcode.Barcode : string.Empty,
                                    MarkdownValue       = (int)Math.Round((decimal)(line.BasePrice - line.UnitPrice) * 100),
                                    OriginalRetailValue = (int)(Math.Round((decimal)(line.Price * 100))),
                                    RecordSequence      = counter * 100
                                };

                                line.SetStatus(OrderLineStatus.ProcessedExportNotification, ledgerRepo);
                                engine.WriteNext(sale);
                                counter++;
                            }
                        });
                        #endregion

                        engine.Flush();
#if !DEBUG
                        util.DisconnectNetworkPath(fileLocation);
#endif
                        unit.Save();
                    }
                }
            }
            catch (Exception ex)
            {
                log.AuditError("Sales order export failed", ex);
            }
        }
Ejemplo n.º 55
0
 private Type CustomSelector(MultiRecordEngine engine, string record)
 {
     if (Char.IsLetter(record[0]))
         return typeof (CustomersSemiColon);
     else if (record.Length == 14)
         return typeof (SampleType);
     else
         return typeof (OrdersVerticalBar);
 }