Exemplo n.º 1
0
        protected virtual void MapTopLevelProperties(IErpOrderModel source, IPurchaseOrder target)
        {
            target.ErpOrderId    = source.ErpOrderId;
            target.OrderNumber   = source.OrderNumber;
            target.OrderHash     = source.OrderHash;
            target.PreInvoiceId  = source.PreInvId;
            target.InvoiceId     = source.InvoiceId;
            target.CustomerName  = source.Customer;
            target.CustomerEmail = source.Email;
            target.CustomerNote  = source.NoteLeftByCustomer;
            target.InternalNote  = source.InternalNote;
            target.VarSymbol     = source.VarSymb ?? string.Empty;
            target.ErpStatusId   = source.ErpStatus ?? string.Empty;
            target.ErpStatusName = source.ErpStatusName ?? string.Empty;

            target.Price        = ParseMoney(source.Price, source, null, nameof(source.Price));
            target.PriceWithVat = ParseMoney(source.PriceWithVat, source, null, nameof(source.PriceWithVat));

            target.ShippingMethodName = MapShippingMethodName(source);
            target.PaymentMethodName  = MapPaymentMethodName(source);
            target.TaxedShippingCost  = ObtainTaxedShippingCost(source);
            target.TaxedPaymentCost   = ObtainTaxedPaymentCost(source);
            target.ShippingTaxPercent = ObtainShippingTaxPercent(source);
            target.PaymentTaxPercent  = ObtainPaymentTaxPercent(source);

            target.PurchaseDate    = ParseDt(source.PurchaseDate, source, null, nameof(source.PurchaseDate));
            target.BuyDate         = ParseDt(source.BuyDate, source, null, nameof(source.BuyDate));
            target.DueDate         = ParseDt(source.BuyDate, source, null, nameof(source.BuyDate));
            target.IsPayOnDelivery = source.IsPayOnDelivery;
            target.DiscountsText   = source.DiscountsText;
        }
Exemplo n.º 2
0
 public OrderMapperHost(IErpDataMapper mapper, IErpOrderModel erpOrder, IPurchaseOrderRepository purchaseOrderRepository, IDatabase database, ICurrencyRepository currencyRepository, IOrderStatusMappingRepository statusMappingRepository, IProductRepository productMappingRepository)
 {
     m_mapper   = mapper;
     m_erpOrder = erpOrder;
     m_purchaseOrderRepository = purchaseOrderRepository;
     m_database                = database;
     m_currencyRepository      = currencyRepository;
     m_statusMappingRepository = statusMappingRepository;
     m_productRepository       = productMappingRepository;
 }
Exemplo n.º 3
0
        protected override decimal ParseMoney(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem, string sourcePropertyName)
        {
            decimal d;

            if (decimal.TryParse(source, out d))
            {
                return(d);
            }
            return(0);
        }
Exemplo n.º 4
0
        protected virtual int ResolveOrderStatusId(IErpOrderModel source, IDictionary <string, IErpOrderStatusMapping> erpOrderStatusMappings)
        {
            IErpOrderStatusMapping status;

            if (!erpOrderStatusMappings.TryGetValue(source.ErpStatus, out status))
            {
                throw new InvalidOperationException($"Status mapping not found for ErpId={source.ErpSystemId} and Status=\"{source.ErpStatus}\"");
            }

            return(status.OrderStatusId);
        }
Exemplo n.º 5
0
        protected override string GetUniqueErpItemId(IErpOrderModel order, IErpOrderItemModel item)
        {
            var nr = base.GetUniqueErpItemId(order, item);

            if (string.IsNullOrWhiteSpace(nr))
            {
                nr = $"{order.OrderNumber}.{item.ProductName}";
            }

            return(nr);
        }
Exemplo n.º 6
0
        public void SaveOrder(IErpOrderModel source)
        {
            var fileName = Path.Combine(m_config.DataDir, $"{source.OrderNumber}.json");

            if (File.Exists(fileName))
            {
                File.Delete(fileName);
            }

            source.ErpSystemId = Erp.Id;
            File.WriteAllText(fileName, JsonConvert.SerializeObject(source));
        }
Exemplo n.º 7
0
 protected virtual void MapInvoiceAddress(IErpOrderModel source, IAddress target)
 {
     target.Country           = source.InvoiceCountry ?? string.Empty;
     target.DescriptiveNumber = source.InvoiceDescriptiveNumber ?? string.Empty;
     target.FirstName         = source.InvoiceFirstName ?? string.Empty;
     target.LastName          = source.InvoiceSurname ?? string.Empty;
     target.OrientationNumber = source.InvoiceOrientationNumber ?? string.Empty;
     target.Phone             = source.InvoicePhone ?? string.Empty;
     target.Street            = source.InvoiceStreet ?? string.Empty;
     target.Zip         = Limit(source.InvoiceZip ?? string.Empty, 16);
     target.City        = source.InvoiceCity ?? string.Empty;
     target.CompanyName = source.InvoiceCompanyName ?? string.Empty;
 }
Exemplo n.º 8
0
 protected virtual void MapDeliveryAddress(IErpOrderModel source, IAddress target)
 {
     target.Country           = source.DeliveryCountry ?? string.Empty;
     target.DescriptiveNumber = source.DeliveryDescriptiveNumber ?? string.Empty;
     target.FirstName         = source.DeliveryName ?? string.Empty;
     target.LastName          = source.DeliverySurname ?? string.Empty;
     target.OrientationNumber = source.DeliveryOrientationNumber ?? string.Empty;
     target.Phone             = source.DeliveryPhone ?? string.Empty;
     target.Street            = source.DeliveryStreet ?? string.Empty;
     target.Zip         = source.DeliveryZip ?? string.Empty;
     target.City        = source.DeliveryCity ?? string.Empty;
     target.CompanyName = source.DeliveryCompanyName ?? string.Empty;
 }
Exemplo n.º 9
0
        protected override decimal?TryParseWeight(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem)
        {
            if (string.IsNullOrWhiteSpace(source))
            {
                return(null);
            }

            if (decimal.TryParse(source, out var parsed))
            {
                return(parsed);
            }

            m_log.Error($"Cannot parse input string \"{source}\" as decimal. OrderNo={sourceRecord.OrderNumber}");
            return(null);
        }
Exemplo n.º 10
0
        private IErpDataMapper GetMapper(IErpOrderModel model)
        {
            IErpDataMapper mapper;

            if (!m_mapperIndex.TryGetValue(model.ErpSystemId, out mapper))
            {
                mapper = m_erpClientFactory.GetErpClient(model.ErpSystemId)?.Mapper;
                if (mapper == null)
                {
                    throw new InvalidOperationException($"Cannot find DataMapper for ErpSystem Id={model.ErpSystemId}");
                }

                m_mapperIndex.Add(model.ErpSystemId, mapper);
            }

            return(mapper);
        }
Exemplo n.º 11
0
 protected override decimal ObtainTaxedPaymentCost(IErpOrderModel source)
 {
     return(0m);
 }
Exemplo n.º 12
0
 protected override decimal ObtainTaxedShippingCost(IErpOrderModel source)
 {
     return(0m);
 }
Exemplo n.º 13
0
 protected override decimal ObtainPaymentTaxPercent(IErpOrderModel source)
 {
     return(0m);
 }
Exemplo n.º 14
0
 protected override decimal ObtainShippingTaxPercent(IErpOrderModel source)
 {
     return(0m);
 }
Exemplo n.º 15
0
 protected override bool HasDeliveryAddress(IErpOrderModel source)
 {
     return(!string.IsNullOrWhiteSpace(source.DeliveryName));
 }
Exemplo n.º 16
0
 protected abstract DateTime ParseDt(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem, string sourcePropertyName);
Exemplo n.º 17
0
 protected override decimal ParseMoney(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem, string sourcePropertyName)
 {
     return(decimal.Parse(source));
 }
Exemplo n.º 18
0
 protected override DateTime ParseDt(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem, string sourcePropertyName)
 {
     return(DateTime.Parse(source));
 }
Exemplo n.º 19
0
 protected abstract string MapPaymentMethodName(IErpOrderModel source);
Exemplo n.º 20
0
 protected abstract decimal ParseMoney(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem, string sourcePropertyName);
Exemplo n.º 21
0
 protected virtual string GetUniqueErpItemId(IErpOrderModel order, IErpOrderItemModel item)
 {
     return(item.ErpOrderItemId);
 }
Exemplo n.º 22
0
 protected virtual string GetUniqueOrderNumber(IErpOrderModel order)
 {
     return(order.OrderNumber);
 }
Exemplo n.º 23
0
 protected override string MapShippingMethodName(IErpOrderModel source)
 {
     return(source.ErpShippingName);
 }
Exemplo n.º 24
0
 protected override bool HasDeliveryAddress(IErpOrderModel source)
 {
     return(!string.IsNullOrEmpty(source.DeliveryCity));
 }
Exemplo n.º 25
0
 protected override string MapPaymentMethodName(IErpOrderModel source)
 {
     return(source.ErpPaymentName);
 }
Exemplo n.º 26
0
 protected abstract string MapShippingMethodName(IErpOrderModel source);
Exemplo n.º 27
0
 protected override decimal?TryParseWeight(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem)
 {
     return(null);
 }
Exemplo n.º 28
0
 protected abstract decimal?TryParseWeight(string source, IErpOrderModel sourceRecord,
                                           IErpOrderItemModel sourceItem);
Exemplo n.º 29
0
 protected override int ResolveOrderStatusId(IErpOrderModel source, IDictionary <string, IErpOrderStatusMapping> erpOrderStatusMappings)
 {
     return(int.Parse(source.ErpStatus));
 }
Exemplo n.º 30
0
        public long ImportErpOrder(IErpOrderModel orderModel)
        {
            long result;

            using (var trx = m_database.OpenTransaction())
            {
                var mapper = GetMapper(orderModel);

                var host = new OrderMapperHost(mapper, orderModel, this, m_database, m_currencyRepository, m_statusMappingRepository, m_productRepository);
                if (!host.Map())
                {
                    trx.Commit();
                    return(host.Order.Id);
                }

                m_currencyRepository.SaveCurrency(host.Currency);
                host.Order.CurrencyId = host.Currency.Id;

                if (host.DeliveryAddress != null)
                {
                    m_database.Save(host.DeliveryAddress);
                    host.Order.DeliveryAddressId = host.DeliveryAddress.Id;
                }
                else
                {
                    host.Order.DeliveryAddressId = null;
                }

                if (host.InvoiceAddress != null)
                {
                    m_database.Save(host.InvoiceAddress);
                    host.Order.InvoiceAddressId = host.InvoiceAddress.Id;
                }
                else
                {
                    host.Order.InvoiceAddressId = null;
                }

                host.Order.ErpId = orderModel.ErpSystemId;

                if (host.Order.Id < 1)
                {
                    host.Order.InsertUserId = m_session.User.Id;
                    host.Order.InsertDt     = DateTime.Now;
                }

                host.Order.ProjectId = m_session.Project.Id;

                m_database.Save(host.Order);

                foreach (var item in host.Items)
                {
                    item.PurchaseOrderId = host.Order.Id;
                    m_database.Save(item);
                }

                foreach (var delId in host.OrderItemsToDelete)
                {
                    var kitChildren = m_database.SelectFrom <IOrderItem>().Where(i => i.KitParentId == delId).Execute()
                                      .ToList();

                    var orderItemIds = new List <long>(1 + kitChildren.Count);
                    orderItemIds.Add(delId);
                    orderItemIds.AddRange(kitChildren.Select(ch => ch.Id));

                    var oimbs = m_database.SelectFrom <IOrderItemMaterialBatch>().Where(ob => ob.OrderItemId.InCsv(orderItemIds)).Execute().ToList();
                    if (oimbs.Any())
                    {
                        m_database.DeleteAll(oimbs);
                    }

                    if (kitChildren.Any())
                    {
                        m_database.DeleteAll(kitChildren);
                    }

                    var item = m_database.SelectFrom <IOrderItem>().Where(i => i.Id == delId).Execute().FirstOrDefault();
                    if (item != null)
                    {
                        m_database.Delete(item);
                    }
                }

                result = host.Order.Id;

                trx.Commit();
            }

            return(result);
        }