public static object ToDataShapeObject(this InvoiceItemDTO invoiceItem, List <string> lstOfFields)
        {
            if (!lstOfFields.Any())
            {
                return(invoiceItem);
            }
            else
            {
                ExpandoObject objectToReturn = new ExpandoObject();
                foreach (var field in lstOfFields)
                {
                    var fieldValue = invoiceItem.GetType()
                                     .GetProperty(field, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance)
                                     .GetValue(invoiceItem, null);

                    ((IDictionary <string, object>)objectToReturn).Add(field, fieldValue);
                }
                return(objectToReturn);
            }
        }
        public static InvoiceItem ToDomain(this InvoiceItemDTO invoiceItem, InvoiceItem originalInvoiceItem = null)
        {
            if (originalInvoiceItem != null && originalInvoiceItem.ID == invoiceItem.ID)
            {
                originalInvoiceItem.SequenceNo      = invoiceItem.SequenceNo;
                originalInvoiceItem.Discount        = invoiceItem.Discount;
                originalInvoiceItem.GST             = invoiceItem.GST;
                originalInvoiceItem.Amount          = invoiceItem.Amount;
                originalInvoiceItem.Description     = invoiceItem.Description;
                originalInvoiceItem.InvoiceID       = invoiceItem.InvoiceID;
                originalInvoiceItem.InvocieType     = invoiceItem.InvoiceType;
                originalInvoiceItem.CreateDate      = invoiceItem.CreateDate;
                originalInvoiceItem.ChangeDate      = invoiceItem.ChangeDate;
                originalInvoiceItem.JsonInvoiceItem =
                    invoiceItem.JsonInvoiceItem != null?invoiceItem.JsonInvoiceItem.ToDomain(originalInvoiceItem.JsonInvoiceItem) : null;

                originalInvoiceItem.ProductInvoiceItem =
                    invoiceItem.ProductInvoiceItem != null?invoiceItem.ProductInvoiceItem.ToDomain(originalInvoiceItem.ProductInvoiceItem) : null;

                return(originalInvoiceItem);
            }

            return(new InvoiceItem()
            {
                ID = invoiceItem.ID,
                SequenceNo = invoiceItem.SequenceNo,
                Discount = invoiceItem.Discount,
                GST = invoiceItem.GST,
                Amount = invoiceItem.Amount,
                Description = invoiceItem.Description,
                InvoiceID = invoiceItem.InvoiceID,
                InvocieType = invoiceItem.InvoiceType,
                Concurrency = invoiceItem.Concurrency,
                CreateDate = invoiceItem.CreateDate,
                ChangeDate = invoiceItem.ChangeDate,
                JsonInvoiceItem = invoiceItem.JsonInvoiceItem != null?invoiceItem.JsonInvoiceItem.ToDomain() : null,
                                      ProductInvoiceItem = invoiceItem.ProductInvoiceItem != null?invoiceItem.ProductInvoiceItem.ToDomain() : null
            });
        }