예제 #1
0
        public void Setup()
        {
            _uow          = new UnitOfWork();
            _orderService = new OrderConfirmationService(null, _uow, Root);

            _project           = _uow.ProjectRepository.Get(p => p.ProjectNumber == "P2013-078").FirstOrDefault();
            _relation          = _project.Files.FirstOrDefault(f => f.File.Name == "Confirm_65225_0001622957");
            _parser            = OrderConfirmationFactory.GetParser(Root, _relation.File);
            _orderConfirmation = _orderService.CreateFromProjectFile(_relation);
        }
예제 #2
0
        public void Setup()
        {
            _uow          = new UnitOfWork();
            _orderService = new OrderConfirmationService(null, _uow, Root);

            _project           = _uow.ProjectRepository.Get(p => p.ProjectNumber == "P2013-083").FirstOrDefault();
            _relation          = _project.Files.FirstOrDefault(f => f.File.Name == "R5942565_EU0028S_22104496 SO 10449601");
            _parser            = OrderConfirmationFactory.GetParser(Root, _relation.File);
            _orderConfirmation = _orderService.CreateFromProjectFile(_relation);
        }
예제 #3
0
        public static IOrderConfirmationParser GetParser(string root, File file)
        {
            var doc = XDocument.Load(root + @"\Config\Orders.xml");
            IOrderConfirmationParser instance = null;

            var filename = string.Format("{0}{1}", root, file.GetPath());
            var reader   = new PdfReader(filename);

            var strategy = new LocationTextExtractionStrategy();
            var text     = PdfTextExtractor.GetTextFromPage(reader, 1, strategy);

            // Replace non-breaking spaces with normal spaces
            text = text.Replace('\u00A0', ' ');

            var nodes      = doc.Descendants("order");
            var actualNode = nodes.FirstOrDefault(n =>
            {
                var vendor = n.Descendants("vendor").FirstOrDefault();
                if (vendor != null)
                {
                    var vendorName = vendor.Attribute("value").Value;
                    var hint       = vendor.Attribute("hint");

                    return(text.Contains(vendorName) || (hint != null && text.Contains(hint.Value)));
                }

                return(false);
            });

            if (actualNode != null)
            {
                var vendorName = actualNode.Descendants("vendor").First().Attribute("value").Value;
                var className  = actualNode.Attribute("class");
                if (className == null)
                {
                    throw new ArgumentException("No order confirmation parser found for vendor " + vendorName);
                }

                var type = Type.GetType(className.Value, true);
                instance            = Activator.CreateInstance(type, root, file.GetPath()) as IOrderConfirmationParser;
                instance.VendorName = vendorName;

                foreach (var arg in actualNode.Descendants("parameter"))
                {
                    var name  = arg.Attribute("name").Value;
                    var value = arg.Attribute("value").Value;

                    var property = type.GetProperty(name);
                    if (property != null)
                    {
                        if (name.StartsWith("PdfConverterRules") && arg.Attribute("extend") != null && Boolean.Parse(arg.Attribute("extend").Value))
                        {
                            property.SetValue(instance, TableFileExtender.ExtendFile(root, value, 25));
                        }
                        else
                        {
                            property.SetValue(instance, value);
                        }
                    }
                    else
                    {
                        throw new ArgumentException("Parameter " + name + " not found on type " + type.Name);
                    }
                }
            }

            return(instance);
        }