/// <summary>
        /// This method used for update company barcode details
        /// </summary>
        /// <param name="companyDetail"></param>
        private void UpdateCompanyBarcode(CompanyDetailAC companyDetail)
        {
            try
            {
                CompanyBarcodeConfiguration companyBarcodeConfiguration = _companyBarcodeConfiguration.FirstOrDefault(x => x.CompanyId == companyDetail.CompanyId);
                if (companyBarcodeConfiguration != null)
                {
                    companyBarcodeConfiguration.From      = companyDetail.CompanyBarcodeConfiguration.From;
                    companyBarcodeConfiguration.To        = companyDetail.CompanyBarcodeConfiguration.To;
                    companyBarcodeConfiguration.StartWith = companyDetail.CompanyBarcodeConfiguration.StartWith;
                    _companyBarcodeConfiguration.Update(companyBarcodeConfiguration);
                    _companyBarcodeConfiguration.SaveChanges();
                }
                else
                {
                    AddCompanyBarcodeConfigurationDetail(companyDetail);
                }
            }
            catch (Exception ex)
            {
                _errorLog.LogException(ex);


                throw;
            }
        }
        /// <summary>
        /// This method used for added company barcode configuration.
        /// </summary>
        /// <param name="companyDetail"></param>
        private void AddCompanyBarcodeConfigurationDetail(CompanyDetailAC companyDetail)
        {
            CompanyBarcodeConfiguration companyBarcodeConfiguration = new CompanyBarcodeConfiguration();

            companyBarcodeConfiguration.CompanyId       = companyDetail.CompanyId;
            companyBarcodeConfiguration.StartWith       = companyDetail.CompanyBarcodeConfiguration.StartWith;
            companyBarcodeConfiguration.From            = companyDetail.CompanyBarcodeConfiguration.From;
            companyBarcodeConfiguration.To              = companyDetail.CompanyBarcodeConfiguration.To;
            companyBarcodeConfiguration.CreatedDateTime = DateTime.UtcNow;
            _companyBarcodeConfiguration.Add(companyBarcodeConfiguration);
            _companyBarcodeConfiguration.SaveChanges();
        }
 /// <summary>
 /// This method used for update balance barcode details
 /// </summary>
 /// <param name="companyDetail"></param>
 private void UpdateBalanceBarcode(CompanyDetailAC companyDetail)
 {
     try
     {
         var balanceBarcodeConfiguration = _balanceBarcodeConfiguration.Fetch(x => x.CompanyId == companyDetail.CompanyId).ToList();
         _balanceBarcodeConfiguration.DeleteRange(balanceBarcodeConfiguration);
         _balanceBarcodeConfiguration.SaveChanges();
         AddedBalanceBarcode(companyDetail);
     }
     catch (Exception ex)
     {
         _errorLog.LogException(ex);
         throw;
     }
 }
 /// <summary>
 /// get company detials by the companyId
 /// </summary>
 /// <param name="companyId">contain comapnyId to get company basic details.</param>
 /// <returns>object of company detail with the basic details of company</returns>
 public CompanyDetailAC GetCompanyDetailsById(int companyId, string userId)
 {
     try
     {
         var companyDetail = _companyConfigurationContext.FirstOrDefault(x => x.CompanyId == companyId);
         if (companyDetail != null)
         {
             var companyDetails    = _companyDataRepository.FirstOrDefault(x => x.Id == companyDetail.CompanyId && x.UserId == userId);
             var copConfigurations = _cpoConfigurationContext.Fetch(x => x.CompanyId == companyDetails.Id).ToList();
             if (companyDetails != null)
             {
                 var companyAC = new CompanyDetailAC();
                 companyAC = ApplicationClassHelper.ConvertType <CompanyConfiguration, CompanyDetailAC>(companyDetail);
                 companyAC.CompanyConfigId                   = companyDetail.Id;
                 companyAC.LowerBound                        = companyDetail.LowerBound != null ? companyDetail.LowerBound.Value : 0;
                 companyAC.UpperBound                        = companyDetail.UpperBound != null ? companyDetail.UpperBound.Value : 0;
                 companyAC.ReturnItem                        = companyDetail.ReturnItem;
                 companyAC.CurrencyId                        = companyDetail.CurrencyId;
                 companyAC.Name                              = companyDetail.CompanyDetail.Name;
                 companyAC.NameSL                            = companyDetail.CompanyDetail.NameSL;
                 companyAC.Location                          = companyDetail.CompanyDetail.Location;
                 companyAC.Email                             = companyDetail.CompanyDetail.Email;
                 companyAC.Zipcode                           = companyDetail.CompanyDetail.Zipcode;
                 companyAC.PhoneNumber                       = companyDetail.CompanyDetail.PhoneNumber;
                 companyAC.CompanyBarcodeConfiguration       = GetCompanyBarcodeConfiguration(companyDetail.Id);
                 companyAC.ListOfBalanceBarcodeConfiguration = GetBalanceBarcodeConfiguration(companyDetail.Id);
                 companyAC.CPOConfigurations                 = GetCpoConfiguration(copConfigurations);
                 return(companyAC);
             }
             else
             {
                 throw new ArgumentException("No Record Found.");
             }
         }
         else
         {
             throw new ArgumentException("No Record Found.");
         }
     }
     catch (Exception ex)
     {
         _errorLog.LogException(ex);
         throw;
     }
 }
 public IHttpActionResult GetCompanyObjectByUserId(string userId)
 {
     try
     {
         var companyDetail   = _companyRepository.GetCompanyDetailByUserId(userId);
         var companyDetailAC = new CompanyDetailAC();
         if (companyDetail != null)
         {
             companyDetailAC.CompanyId = companyDetail.Id;
             companyDetailAC.Name      = companyDetail.Name;
             companyDetailAC.userId    = companyDetail.UserId;
         }
         return(Ok(companyDetailAC));
     }
     catch (Exception ex)
     {
         _errorLog.LogException(ex);
         throw;
     }
 }
 public IHttpActionResult UpdateCompanyDetail(CompanyDetailAC companyDetail)
 {
     try
     {
         if (HttpContext.Current.User.Identity.IsAuthenticated)
         {
             var companyDetails = _companyRepository.UpdateCompanyDetail(companyDetail);
             return(Ok(companyDetails));
         }
         else
         {
             return(BadRequest());
         }
     }
     catch (Exception ex)
     {
         _errorLog.LogException(ex);
         throw;
     }
 }
 public IHttpActionResult AddCompanyDetail(CompanyDetailAC companyDetail)
 {
     try
     {
         if (HttpContext.Current.User.Identity.IsAuthenticated)
         {
             var currentUser    = HttpContext.Current.User.Identity.GetUserId();
             var companyDetaill = _companyRepository.AddCompanyDetail(companyDetail, currentUser);
             return(Ok(companyDetaill));
         }
         else
         {
             return(BadRequest());
         }
     }
     catch (Exception ex)
     {
         _errorLog.LogException(ex);
         throw;
     }
 }
 public IHttpActionResult AddSystemSetting(CompanyDetailAC systemSetting)
 {
     try
     {
         if (HttpContext.Current.User.Identity.IsAuthenticated)
         {
             var userName             = (HttpContext.Current.User.Identity.Name);
             var companySystemSetting = _companyRepository.AddSystemSetting(systemSetting, userName);
             return(Ok(companySystemSetting));
         }
         else
         {
             return(BadRequest());
         }
     }
     catch (Exception ex)
     {
         _errorLog.LogException(ex);
         throw;
     }
 }
        /// <summary>
        /// This method used for added balance barcode. -An
        /// </summary>
        /// <param name="companyDetail"></param>
        private void AddedBalanceBarcode(CompanyDetailAC companyDetail)
        {
            try
            {
                foreach (var balanceBarcodeConfiguration in companyDetail.ListOfBalanceBarcodeConfiguration)
                {
                    BalanceBarcodeConfiguration balanceBarcodeConfig = new BalanceBarcodeConfiguration();
                    balanceBarcodeConfig.CompanyId       = companyDetail.CompanyId;
                    balanceBarcodeConfig.CreatedDateTime = DateTime.UtcNow;
                    balanceBarcodeConfig.Name            = balanceBarcodeConfiguration.Name;
                    _balanceBarcodeConfiguration.Add(balanceBarcodeConfig);
                    _balanceBarcodeConfiguration.SaveChanges();

                    //This method used for added balance barcode section.
                    AddedBalanceBarcodeSection(balanceBarcodeConfiguration, balanceBarcodeConfig.Id);
                }
            }
            catch (Exception ex)
            {
                _errorLog.LogException(ex);
                throw;
            }
        }
        public IHttpActionResult GetAllCompanyDetail()
        {
            try
            {
                if (HttpContext.Current.User.Identity.IsAuthenticated)
                {
                    var companyCollection = new List <CompanyDetailAC>();
                    var currentUser       = HttpContext.Current.User.Identity.GetUserId();

                    foreach (var companyDetail in _companyRepository.GetCurrentUserCompanyDetailList(currentUser))
                    {
                        var companyDetailAC = new CompanyDetailAC();
                        companyDetailAC                = ApplicationClassHelper.ConvertType <CompanyDetail, CompanyDetailAC>(companyDetail);
                        companyDetailAC.CompanyId      = companyDetail.Id;
                        companyDetailAC.Name           = companyDetail.Name;
                        companyDetailAC.NameSL         = companyDetail.NameSL;
                        companyDetailAC.Location       = companyDetail.Location;
                        companyDetailAC.Email          = companyDetail.Email;
                        companyDetailAC.Zipcode        = companyDetail.Zipcode;
                        companyDetailAC.PhoneNumber    = companyDetail.PhoneNumber;
                        companyDetailAC.IsDeleteOrEdit = true;
                        companyCollection.Add(companyDetailAC);
                    }
                    return(Ok(companyCollection));
                }
                else
                {
                    return(BadRequest());
                }
            }
            catch (Exception ex)
            {
                _errorLog.LogException(ex);
                throw;
            }
        }
 /// <summary>
 /// this method is used to add system settings to database. -JJ
 /// </summary>
 /// <param name="companyDetail">object of CompanyDetailAC</param>
 /// <returns>saved object of CompanyDetailAC</returns>
 public CompanyDetailAC AddSystemSetting(CompanyDetailAC systemSetting, string userName)
 {
     try
     {
         var user           = _userDetailContext.FirstOrDefault(x => x.UserName == userName);
         var companyDetails = _companyDataRepository.FirstOrDefault(x => x.UserId == user.UserId);
         if (companyDetails != null)
         {
             var companyConfiguration = _companyConfigurationContext.FirstOrDefault(x => x.CompanyId == companyDetails.Id);
             companyConfiguration.IsIcrrGeneratedAtAddItem     = systemSetting.IsIcrrGeneratedAtAddItem;
             companyConfiguration.IsOfferCreatedBelowCostPrice = systemSetting.IsOfferCreatedBelowCostPrice;
             companyConfiguration.IsIcrCreatedBelowCostPrice   = systemSetting.IsIcrCreatedBelowCostPrice;
             companyConfiguration.ModifiedDateTime             = DateTime.UtcNow;
             _companyConfigurationContext.Update(companyConfiguration);
             _companyConfigurationContext.SaveChanges();
         }
         return(systemSetting);
     }
     catch (Exception ex)
     {
         _errorLog.LogException(ex);
         throw;
     }
 }
        /// <summary>
        /// update the company details
        /// </summary>
        /// <param name="companyDetail">compant detailAC with updated company detail.</param>
        /// <returns>object company detail with updated company details</returns>
        public CompanyDetailAC UpdateCompanyDetail(CompanyDetailAC companyDetail)
        {
            try
            {
                int companyCount = _companyDataRepository.Fetch(x => x.Name == companyDetail.Name && x.Id != companyDetail.CompanyId).Count();
                if (companyCount != 0)
                {
                    throw new ArgumentException("Company name already exists.");
                }
                var companyinfo = _companyDataRepository.GetById(companyDetail.CompanyId);
                companyinfo.Name             = companyDetail.Name;
                companyinfo.Location         = companyDetail.Location;
                companyinfo.Email            = companyDetail.Email;
                companyinfo.Zipcode          = companyDetail.Zipcode;
                companyinfo.PhoneNumber      = companyDetail.PhoneNumber;
                companyinfo.NameSL           = companyDetail.NameSL;
                companyinfo.ModifiedDateTime = DateTime.UtcNow;
                _companyDataRepository.Update(companyinfo);
                _companyDataRepository.SaveChanges();

                var companyConfig = _companyConfigurationContext.FirstOrDefault(x => x.CompanyId == companyDetail.CompanyId);
                companyConfig.CreditCardPayment              = companyDetail.CreditCardPayment;
                companyConfig.DebitCardPayment               = companyDetail.DebitCardPayment;
                companyConfig.ChequePayment                  = companyDetail.ChequePayment;
                companyConfig.CoupanPayment                  = companyDetail.CoupanPayment;
                companyConfig.CreditAccountPayment           = companyDetail.CreditAccountPayment;
                companyConfig.AllowCreditAccountLimit        = companyDetail.AllowCreditAccountLimit;
                companyConfig.CPODownPaymentDiscount         = companyDetail.CPODownPaymentDiscount;
                companyConfig.ValidNumberOfDaysForReturnItem = companyDetail.ValidNumberOfDaysForReturnItem;
                companyConfig.UpperBound        = companyDetail.UpperBound;
                companyConfig.LowerBound        = companyDetail.LowerBound;
                companyConfig.ReturnItem        = companyDetail.ReturnItem;
                companyConfig.NormalBarcodeFrom = companyDetail.NormalBarcodeFrom;
                companyConfig.NormalBarcodeTo   = companyDetail.NormalBarcodeTo;
                companyConfig.ModifiedDateTime  = DateTime.UtcNow;
                _companyConfigurationContext.Update(companyConfig);
                _companyConfigurationContext.SaveChanges();

                #region Update Balance and Company Barcode details
                UpdateBalanceBarcode(companyDetail);
                UpdateCompanyBarcode(companyDetail);
                #endregion

                companyDetail.CPOConfigurations.ForEach(x =>
                {
                    var cpoConfiguration = _cpoConfigurationContext.FirstOrDefault(y => y.Id == x.Id && x.CompanyId != 0);
                    if (cpoConfiguration != null)
                    {
                        cpoConfiguration.Name = x.AdditionalCostType;
                        _cpoConfigurationContext.Update(cpoConfiguration);
                        _cpoConfigurationContext.SaveChanges();
                    }
                    else
                    {
                        cpoConfiguration = new AdditionalService
                        {
                            Name      = x.AdditionalCostType,
                            CompanyId = companyDetail.CompanyId
                        };
                        _cpoConfigurationContext.Add(cpoConfiguration);
                        _cpoConfigurationContext.SaveChanges();
                    }
                });


                return(companyDetail);
            }
            catch (Exception ex)
            {
                _errorLog.LogException(ex);
                throw;
            }
        }
        /// <summary>
        /// add new company details
        /// </summary>
        /// <param name="companyDetail">company detailAC with company details</param>
        /// <returns>object of company detail</returns>
        public CompanyDetailAC AddCompanyDetail(CompanyDetailAC companyDetail, string userId)
        {
            try
            {
                //its check company name already exist or not.
                int companyCount = _companyDataRepository.Fetch(x => x.Name == companyDetail.Name).Count();
                if (companyCount != 0)
                {
                    throw new ArgumentException("Company name already exists.");
                }

                //its check company created or not.
                int multipleCount = _companyDataRepository.Fetch(x => x.UserId == userId).Count();
                if (multipleCount != 0)
                {
                    throw new ArgumentException("User can not create multiple company.");
                }


                //save the company basic details
                var companyDetails = new CompanyDetail
                {
                    Name            = companyDetail.Name,
                    Location        = companyDetail.Location,
                    Email           = companyDetail.Email,
                    Zipcode         = companyDetail.Zipcode,
                    PhoneNumber     = companyDetail.PhoneNumber,
                    CreatedDateTime = DateTime.UtcNow,
                    UserId          = userId,
                    NameSL          = companyDetail.NameSL
                };
                _companyDataRepository.Add(companyDetails);
                _companyDataRepository.SaveChanges();

                //save the company custom cinfiguration.
                var companyCongig = new CompanyConfiguration
                {
                    CompanyId                      = companyDetails.Id,
                    NormalBarcodeFrom              = companyDetail.NormalBarcodeFrom,
                    NormalBarcodeTo                = companyDetail.NormalBarcodeTo,
                    PriceStartFrom                 = companyDetail.PriceStartFrom,
                    PriceDigitLength               = companyDetail.PriceDigitLength,
                    CreditCardPayment              = companyDetail.CreditCardPayment,
                    DebitCardPayment               = companyDetail.DebitCardPayment,
                    ChequePayment                  = companyDetail.ChequePayment,
                    CoupanPayment                  = companyDetail.CoupanPayment,
                    CreditAccountPayment           = companyDetail.CreditAccountPayment,
                    AllowCreditAccountLimit        = companyDetail.AllowCreditAccountLimit,
                    CPODownPaymentDiscount         = companyDetail.CPODownPaymentDiscount,
                    ReturnItem                     = companyDetail.ReturnItem,
                    InvoiceNo                      = companyDetail.InvoiceNo,
                    ReturnInvoiceNo                = companyDetail.ReturnInvoiceNo,
                    CPOInvoiceNo                   = companyDetail.CPOInvoiceNo,
                    ValidNumberOfDaysForReturnItem = companyDetail.ValidNumberOfDaysForReturnItem,
                    SPOInvoiceNo                   = companyDetail.SPOInvoiceNo,
                    ItemDestructionNo              = companyDetail.ItemDestructionNo,
                    SupplierReturnNo               = companyDetail.SupplierReturnNo,
                    ProfitMargin                   = companyDetail.ProfitMargin,
                    LanguageId                     = companyDetail.LanguageId,
                    CreatedDateTime                = DateTime.UtcNow,
                    CashPayment                    = companyDetail.CashPayment,
                    CurrencyId                     = companyDetail.CurrencyId,
                    UpperBound                     = companyDetail.UpperBound,
                    LowerBound                     = companyDetail.LowerBound
                };

                _companyConfigurationContext.Add(companyCongig);
                _companyConfigurationContext.SaveChanges();

                #region Added Barcode Details

                #region Company Barcode Details
                companyDetail.CompanyId = companyDetails.Id;
                AddCompanyBarcodeConfigurationDetail(companyDetail);
                #endregion

                #region Balance Barcode Details
                AddedBalanceBarcode(companyDetail);
                #endregion

                #endregion

                var cpoConfigurationList = new List <AdditionalService>();
                companyDetail.CPOConfigurations.ForEach(x =>
                {
                    var cpoConfiguration = new AdditionalService
                    {
                        Name      = x.AdditionalCostType,
                        CompanyId = companyDetails.Id
                    };
                    cpoConfigurationList.Add(cpoConfiguration);
                });

                if (cpoConfigurationList.Any())
                {
                    _cpoConfigurationContext.AddRange(cpoConfigurationList);
                    _cpoConfigurationContext.SaveChanges();
                }

                companyDetail.CompanyId       = companyDetails.Id;
                companyDetail.CompanyConfigId = companyCongig.Id;

                return(companyDetail);
            }
            catch (Exception ex)
            {
                _errorLog.LogException(ex);
                throw;
            }
        }