Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }