public InvoiceDto Convert(Invoice source, InvoiceDto destination, ResolutionContext context)
        {
            var crmSettings     = _settingsManager.Load <CrmSettings>();
            var defaultCurrency = _currencyProvider.Get(crmSettings.DefaultCurrency);

            var result = new InvoiceDto
            {
                Id           = source.ID,
                Status       = context.Mapper.Map <InvoiceStatusDto>(source.Status),
                Number       = source.Number,
                IssueDate    = _apiDateTimeHelper.Get(source.IssueDate),
                TemplateType = source.TemplateType,
                DueDate      = _apiDateTimeHelper.Get(source.DueDate),
                Currency     = !String.IsNullOrEmpty(source.Currency) ?
                               context.Mapper.Map <CurrencyInfoDto>(_currencyProvider.Get(source.Currency)) :
                               context.Mapper.Map <CurrencyInfoDto>(defaultCurrency),
                ExchangeRate        = source.ExchangeRate,
                Language            = source.Language,
                PurchaseOrderNumber = source.PurchaseOrderNumber,
                Terms       = source.Terms,
                Description = source.Description,
                FileID      = source.FileID,
                CreateOn    = _apiDateTimeHelper.Get(source.CreateOn),
                CreateBy    = _employeeWraperHelper.Get(source.CreateBy),
                CanEdit     = _crmSecurity.CanEdit(source),
                CanDelete   = _crmSecurity.CanDelete(source),
            };

            if (source.ContactID > 0)
            {
                result.Contact = context.Mapper.Map <ContactBaseWithEmailDto>(_daoFactory.GetContactDao().GetByID(source.ContactID));
            }

            if (source.ConsigneeID > 0)
            {
                result.Consignee = context.Mapper.Map <ContactBaseWithEmailDto>(_daoFactory.GetContactDao().GetByID(source.ConsigneeID));
            }

            if (source.EntityID > 0)
            {
                result.Entity = _entityDtoHelper.Get(source.EntityType, source.EntityID);
            }

            result.Cost = source.GetInvoiceCost(_daoFactory);

            result.InvoiceLines = source.GetInvoiceLines(_daoFactory).Select(x => context.Mapper.Map <InvoiceLineDto>(x)).ToList();

            return(result);
        }
        public InvoiceItemDto Convert(InvoiceItem source, InvoiceItemDto destination, ResolutionContext context)
        {
            if (destination != null)
            {
                throw new NotImplementedException();
            }

            var crmSettings     = _settingsManager.Load <CrmSettings>();
            var defaultCurrency = _currencyProvider.Get(crmSettings.DefaultCurrency);

            var result = new InvoiceItemDto
            {
                Title            = source.Title,
                StockKeepingUnit = source.StockKeepingUnit,
                Description      = source.Description,
                Price            = source.Price,
                StockQuantity    = source.StockQuantity,
                TrackInvenory    = source.TrackInventory,
                CreateOn         = _apiDateTimeHelper.Get(source.CreateOn),
                CreateBy         = _employeeWraperHelper.Get(source.CreateBy),
                Currency         = !String.IsNullOrEmpty(source.Currency) ?
                                   context.Mapper.Map <CurrencyInfoDto>(_currencyProvider.Get(source.Currency)) :
                                   context.Mapper.Map <CurrencyInfoDto>(defaultCurrency),
                CanEdit   = _crmSecurity.CanEdit(source),
                CanDelete = _crmSecurity.CanDelete(source)
            };

            if (source.InvoiceTax1ID > 0)
            {
                var invoiceTax1ID = _daoFactory.GetInvoiceTaxDao().GetByID(source.InvoiceTax1ID);

                result.InvoiceTax1 = context.Mapper.Map <InvoiceTaxDto>(invoiceTax1ID);
            }

            if (source.InvoiceTax2ID > 0)
            {
                var invoiceTax2ID = _daoFactory.GetInvoiceTaxDao().GetByID(source.InvoiceTax2ID);

                result.InvoiceTax2 = context.Mapper.Map <InvoiceTaxDto>(invoiceTax2ID);
            }

            return(result);
        }
        public InvoiceTaxDto Convert(InvoiceTax source, InvoiceTaxDto destination, ResolutionContext context)
        {
            if (destination != null)
            {
                throw new NotImplementedException();
            }

            var result = new InvoiceTaxDto();

            result.Id          = source.ID;
            result.Name        = source.Name;
            result.Description = source.Description;
            result.Rate        = source.Rate;
            result.CreateOn    = _apiDateTimeHelper.Get(source.CreateOn);
            result.CreateBy    = _employeeWraperHelper.Get(source.CreateBy);
            result.CanEdit     = _crmSecurity.CanEdit(source);
            result.CanDelete   = _crmSecurity.CanDelete(source);

            return(result);
        }
        public ContactBaseDto Convert(Contact source, ContactBaseDto destination, ResolutionContext context)
        {
            ContactBaseDto result;

            if (source is Company)
            {
                result = new CompanyDto();
            }
            else
            {
                result = new PersonDto();
            }

            result.Id          = source.ID;
            result.DisplayName = source.GetTitle();
            result.IsPrivate   = _crmSecurity.IsPrivate(source);
            result.IsShared    = source.ShareType == ShareType.ReadWrite || source.ShareType == ShareType.Read;
            result.ShareType   = source.ShareType;

            result.Currency = !String.IsNullOrEmpty(source.Currency) ?
                              context.Mapper.Map <CurrencyInfoDto>(_currencyProvider.Get(source.Currency)) : null;


            result.SmallFotoUrl  = String.Format("{0}HttpHandlers/filehandler.ashx?action=contactphotoulr&cid={1}&isc={2}&ps=1", _pathProvider.BaseAbsolutePath, source.ID, source is Company).ToLower();
            result.MediumFotoUrl = String.Format("{0}HttpHandlers/filehandler.ashx?action=contactphotoulr&cid={1}&isc={2}&ps=2", _pathProvider.BaseAbsolutePath, source.ID, source is Company).ToLower();
            result.IsCompany     = source is Company;
            result.CanEdit       = _crmSecurity.CanEdit(source);
            result.CanDelete     = _crmSecurity.CanDelete(source);

            if (result.IsPrivate)
            {
                result.AccessList = _crmSecurity.GetAccessSubjectTo(source)
                                    .Select(item => _employeeDtoHelper.Get(item.Key));
            }

            return(result);
        }