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; }
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; }
protected override decimal ParseMoney(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem, string sourcePropertyName) { decimal d; if (decimal.TryParse(source, out d)) { return(d); } return(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); }
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); }
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)); }
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; }
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; }
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); }
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); }
protected override decimal ObtainTaxedPaymentCost(IErpOrderModel source) { return(0m); }
protected override decimal ObtainTaxedShippingCost(IErpOrderModel source) { return(0m); }
protected override decimal ObtainPaymentTaxPercent(IErpOrderModel source) { return(0m); }
protected override decimal ObtainShippingTaxPercent(IErpOrderModel source) { return(0m); }
protected override bool HasDeliveryAddress(IErpOrderModel source) { return(!string.IsNullOrWhiteSpace(source.DeliveryName)); }
protected abstract DateTime ParseDt(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem, string sourcePropertyName);
protected override decimal ParseMoney(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem, string sourcePropertyName) { return(decimal.Parse(source)); }
protected override DateTime ParseDt(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem, string sourcePropertyName) { return(DateTime.Parse(source)); }
protected abstract string MapPaymentMethodName(IErpOrderModel source);
protected abstract decimal ParseMoney(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem, string sourcePropertyName);
protected virtual string GetUniqueErpItemId(IErpOrderModel order, IErpOrderItemModel item) { return(item.ErpOrderItemId); }
protected virtual string GetUniqueOrderNumber(IErpOrderModel order) { return(order.OrderNumber); }
protected override string MapShippingMethodName(IErpOrderModel source) { return(source.ErpShippingName); }
protected override bool HasDeliveryAddress(IErpOrderModel source) { return(!string.IsNullOrEmpty(source.DeliveryCity)); }
protected override string MapPaymentMethodName(IErpOrderModel source) { return(source.ErpPaymentName); }
protected abstract string MapShippingMethodName(IErpOrderModel source);
protected override decimal?TryParseWeight(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem) { return(null); }
protected abstract decimal?TryParseWeight(string source, IErpOrderModel sourceRecord, IErpOrderItemModel sourceItem);
protected override int ResolveOrderStatusId(IErpOrderModel source, IDictionary <string, IErpOrderStatusMapping> erpOrderStatusMappings) { return(int.Parse(source.ErpStatus)); }
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); }