private TDocument MapToEntity(IDocuments sapDoc) { var document = new TDocument { Key = sapDoc.DocEntry, Sn = sapDoc.DocNum, ExternalSn = sapDoc.NumAtCard, CustomerSn = sapDoc.CardCode, CustomerName = sapDoc.CardName, CustomerAddress = sapDoc.Address, CustomerFederalTaxId = sapDoc.FederalTaxID, IsClosed = sapDoc.ClosingDate > sapDoc.CreationDate, IsCanceled = sapDoc.Cancelled == BoYesNoEnum.tYES, Date = sapDoc.DocDate, CreationDateTime = sapDoc.CreationDate, ClosingDate = sapDoc.ClosingDate, Comments = sapDoc.Comments, SalesmanSn = sapDoc.SalesPersonCode, OwnerEmployeeSn = sapDoc.DocumentsOwner, Currency = sapDoc.DocCurrency, DocTotal = Convert.ToDecimal(sapDoc.DocTotal), DiscountPercent = Convert.ToDecimal(sapDoc.DiscountPercent), VatPercent = Convert.ToDecimal(sapDoc.VatPercent), Vat = Convert.ToDecimal(sapDoc.VatSum), TotalDiscountAndRounding = Convert.ToDecimal(sapDoc.TotalDiscount), AttachmentsCode = sapDoc.AttachmentEntry }; if (_curDocType == _quotationType) { (document as QuotationEntity).ValidUntil = sapDoc.DocDueDate; } else if (_curDocType == _orderType) { (document as OrderEntity).SupplyDate = sapDoc.DocDueDate; } else if (_curDocType == _deliveryNoteType) { (document as DeliveryNoteEntity).SupplyDate = sapDoc.DocDueDate; } //add items document.Items = new List <DocItemEntity>(); for (var itemNumber = 0; itemNumber < sapDoc.Lines.Count; itemNumber++) { sapDoc.Lines.SetCurrentLine(itemNumber); var i = sapDoc.Lines; var docItem = new DocItemEntity { ItemNumber = i.LineNum, Code = i.ItemCode, Description = i.ItemDescription, IsOpen = i.LineStatus == BoStatus.bost_Open, Quantity = Convert.ToDecimal(i.Quantity), Currency = i.Currency, PricePerQuantity = Convert.ToDecimal(i.UnitPrice), DiscountPercent = Convert.ToDecimal(i.DiscountPercent), Comments = i.FreeText, Details = i.Text, VisualOrder = i.VisualOrder, OpenQuantity = Convert.ToDecimal(i.RemainingOpenQuantity) }; var pDic = _propertiesRepository.FindProperties(docItem.Code); pDic = pDic.ToDictionary(p => p.Key.ToLower(), p => p.Value); docItem.Properties = new Dictionary <string, object>(); var defaultProperties = new List <string>(); if (pDic.TryGetValue("width1", out var propertyKey)) { defaultProperties.Add(propertyKey); docItem.Properties.Add(propertyKey, Convert.ToDouble(i.Width1)); } ; if (pDic.TryGetValue("height1", out propertyKey)) { defaultProperties.Add(propertyKey); docItem.Properties.Add(propertyKey, Convert.ToDouble(i.Height1)); } ; if (pDic.TryGetValue("length1", out propertyKey)) { defaultProperties.Add(propertyKey); docItem.Properties.Add(propertyKey, Convert.ToDouble(i.Lengh1)); } ; var otherProperties = _propertiesRepository.FindProperties(docItem.Code).Where(p => !defaultProperties.Contains(p.Value.ToLower())) .ToDictionary(p => p.Value, p => p.Key); var sapProperties = _propertiesRepository.FindProperties(docItem.Code).ToDictionary(p => p.Value, p => p.Key); foreach (var key in otherProperties.Keys) { switch (i.UserFields.Fields.Item(sapProperties[key]).Type) { case BoFieldTypes.db_Numeric: docItem.Properties.Add(key, Convert.ToInt32(i.UserFields.Fields.Item(sapProperties[key]).Value)); break; case BoFieldTypes.db_Float: docItem.Properties.Add(key, Convert.ToDecimal(i.UserFields.Fields.Item(sapProperties[key]).Value)); break; case BoFieldTypes.db_Date: docItem.Properties.Add(key, Convert.ToDateTime(i.UserFields.Fields.Item(sapProperties[key]).Value)); break; case BoFieldTypes.db_Alpha: docItem.Properties.Add(key, Convert.ToString(i.UserFields.Fields.Item(sapProperties[key]).Value)); break; case BoFieldTypes.db_Memo: docItem.Properties.Add(key, Convert.ToString(i.UserFields.Fields.Item(sapProperties[key]).Value)); break; } ; } if (i.BaseType != -1) { docItem.BaseDoc = new DocReferencedEntity(); docItem.BaseItemNumber = i.BaseLine; // i.BaseType == 203 ? typeof() : // i.BaseType == 24 ? ?typeof(OrderEntity) :? typeof(OrderEntity); docItem.BaseDoc.DocType = i.BaseType == 13 ? DocType.Invoice : i.BaseType == 17 ? DocType.Order : i.BaseType == 23 ? DocType.Quotation : i.BaseType == 14 ? DocType.CreditNote : i.BaseType == 15 ? DocType.DeliveryNote : i.BaseType == 203 ? DocType.DownPaymentRequest : i.BaseType == 24 ? DocType.Receipt : DocType.Other; docItem.BaseDoc.DocKey = i.BaseEntry; } document.Items.Add(docItem); } return(document); }
private Document_Lines MapToDocLine(Document_Lines docLine, DocItemEntity docItem) { docLine.ItemCode = docItem.Code; docLine.ItemDescription = docItem.Description; if (docItem.BaseItemNumber.HasValue) { docLine.BaseLine = docItem.BaseItemNumber.Value; docLine.BaseType = docItem.BaseDoc.DocType == DocType.Invoice ? 13 : docItem.BaseDoc.DocType == DocType.Order ? 17 : docItem.BaseDoc.DocType == DocType.Quotation ? 23 : docItem.BaseDoc.DocType == DocType.CreditNote ? 14 : docItem.BaseDoc.DocType == DocType.DeliveryNote ? 15 : docItem.BaseDoc.DocType == DocType.DownPaymentRequest ? 203 : docItem.BaseDoc.DocType == DocType.Receipt ? 24 : -1; docLine.BaseEntry = (int)docItem.BaseDoc.DocKey; } docLine.FreeText = docItem.Comments; docLine.ItemDetails = docItem.Details; // docLine.LineStatus = docItem.IsOpen? BoStatus. docLine.Quantity = Convert.ToDouble(docItem.Quantity); docLine.Currency = docItem.Currency; docLine.UnitPrice = Convert.ToDouble(docItem.PricePerQuantity); docLine.DiscountPercent = Convert.ToDouble(docItem.DiscountPercent); //docLine.LineTotal = Convert.ToDouble(docItem.TotalPrice); ///TODO handle default properties /// var pDic = _propertiesRepository.FindProperties(docItem.Code); pDic = pDic.ToDictionary(p => p.Key.ToLower(), p => p.Value); var defaultProperties = new List <string>(); if (pDic.TryGetValue("width1", out var propertyKey)) { defaultProperties.Add(propertyKey); if (docItem.Properties.ContainsKey(propertyKey)) { docLine.Width1 = Convert.ToDouble(docItem.Properties[propertyKey]); } else { docLine.Width1 = 1;//default value } } ; if (pDic.TryGetValue("height1", out propertyKey)) { defaultProperties.Add(propertyKey); if (docItem.Properties.ContainsKey(propertyKey)) { docLine.Height1 = Convert.ToDouble(docItem.Properties[propertyKey]); } else { docLine.Height1 = 1;//default value } } ; if (pDic.TryGetValue("length1", out propertyKey)) { defaultProperties.Add(propertyKey); if (docItem.Properties.ContainsKey(propertyKey)) { docLine.Lengh1 = Convert.ToDouble(docItem.Properties[propertyKey]); } else { docLine.Lengh1 = 1;//default value } } ; var otherProperties = docItem.Properties.Where(p => !defaultProperties.Contains(p.Key.ToLower())) .ToDictionary(p => p.Key, p => p.Value); var sapProperties = _propertiesRepository.FindProperties(docItem.Code).ToDictionary(p => p.Value, p => p.Key); foreach (var key in otherProperties.Keys) { switch (docLine.UserFields.Fields.Item(sapProperties[key]).Type) { case BoFieldTypes.db_Numeric: docLine.UserFields.Fields.Item(sapProperties[key]).Value = Convert.ToInt32(otherProperties[key]); break; case BoFieldTypes.db_Float: docLine.UserFields.Fields.Item(sapProperties[key]).Value = Convert.ToDecimal(otherProperties[key]); break; case BoFieldTypes.db_Date: docLine.UserFields.Fields.Item(sapProperties[key]).Value = Convert.ToDateTime(otherProperties[key]); break; case BoFieldTypes.db_Alpha: docLine.UserFields.Fields.Item(sapProperties[key]).Value = Convert.ToString(otherProperties[key]); break; case BoFieldTypes.db_Memo: docLine.UserFields.Fields.Item(sapProperties[key]).Value = Convert.ToString(otherProperties[key]); break; } ; } return(docLine); }