public async Task <ResponseAC> AddProvider(long userId, ProviderAC providerAC, string loginUserName)
        {
            ResponseAC responeAC = new ResponseAC();

            if (!await _dbTeleBilling_V01Context.Provider.AnyAsync(x => x.ContractNumber.ToLower() == providerAC.ContractNumber.ToLower() && !x.IsDelete))
            {
                TeleBillingUtility.Models.Provider provider = new TeleBillingUtility.Models.Provider();
                provider               = _mapper.Map <TeleBillingUtility.Models.Provider>(providerAC);
                provider.IsActive      = true;
                provider.CreatedDate   = DateTime.Now;
                provider.CreatedBy     = userId;
                provider.TransactionId = _iLogManagement.GenerateTeleBillingTransctionID();

                await _dbTeleBilling_V01Context.AddAsync(provider);

                await _dbTeleBilling_V01Context.SaveChangesAsync();


                foreach (var serviceType in providerAC.ServiceTypes)
                {
                    Providerservice providerService = new Providerservice();
                    providerService.ProviderId    = provider.Id;
                    providerService.ServiceTypeId = serviceType.Id;
                    await _dbTeleBilling_V01Context.AddAsync(providerService);

                    await _dbTeleBilling_V01Context.SaveChangesAsync();
                }

                #region Added Provider Contact Detail
                List <Providercontactdetail> providerContactDetails = new List <Providercontactdetail>();
                foreach (var item in providerAC.ProviderContactDetailACList)
                {
                    Providercontactdetail providerContectDatail = new Providercontactdetail();
                    providerContectDatail            = _mapper.Map <Providercontactdetail>(item);
                    providerContectDatail.ProviderId = provider.Id;
                    providerContactDetails.Add(providerContectDatail);
                }

                await _dbTeleBilling_V01Context.AddRangeAsync(providerContactDetails);

                await _dbTeleBilling_V01Context.SaveChangesAsync();

                #endregion

                await _iLogManagement.SaveAuditActionLog((int)EnumList.AuditLogActionType.AddProvider, loginUserName, userId, "Provider(" + provider.Name + ")", (int)EnumList.ActionTemplateTypes.Add, provider.Id);

                responeAC.Message    = _iStringConstant.ProviderAddedSuccessfully;
                responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Success);
            }
            else
            {
                responeAC.Message    = _iStringConstant.ContractNumberExists;
                responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Error);
            }
            return(responeAC);
        }
Beispiel #2
0
        /// <summary>
        /// Insert the notification list
        /// </summary>
        /// <param name="notificationlogList"></param>
        /// <returns></returns>
        public async Task <bool> SaveNotificationList(List <Notificationlog> notificationlogList)
        {
            await _dbTeleBilling_V01Context.AddRangeAsync(notificationlogList);

            await _dbTeleBilling_V01Context.SaveChangesAsync();

            return(true);
        }
        public async Task <ResponseAC> AddAssignedTelephone(long userId, AssignTelephoneDetailAC assignTelephoneDetailAC, string loginUserName)
        {
            ResponseAC responseAC = new ResponseAC();

            try
            {
                Telephonenumberallocation telephoneNumberAllocation = _mapper.Map <Telephonenumberallocation>(assignTelephoneDetailAC);
                telephoneNumberAllocation.CreatedBy     = userId;
                telephoneNumberAllocation.CreatedDate   = DateTime.Now;
                telephoneNumberAllocation.TransactionId = _iLogManagement.GenerateTeleBillingTransctionID();
                telephoneNumberAllocation.IsActive      = true;
                await _dbTeleBilling_V01Context.AddAsync(telephoneNumberAllocation);

                await _dbTeleBilling_V01Context.SaveChangesAsync();

                List <Telephonenumberallocationpackage> telePhoneNumberAllocationPackages = new List <Telephonenumberallocationpackage>();
                foreach (var item in assignTelephoneDetailAC.TelePhonePackageDetails)
                {
                    Telephonenumberallocationpackage telePhoneNumberAllocationPackage = new Telephonenumberallocationpackage();
                    telePhoneNumberAllocationPackage.PackageId = item.PackageId;
                    telePhoneNumberAllocationPackage.ServiceId = item.ServiceId;
                    telePhoneNumberAllocationPackage.StartDate = item.StartDate.AddDays(1);
                    telePhoneNumberAllocationPackage.EndDate   = item.EndDate.AddDays(1);
                    telePhoneNumberAllocationPackage.TelephoneNumberAllocationId = telephoneNumberAllocation.Id;
                    telePhoneNumberAllocationPackages.Add(telePhoneNumberAllocationPackage);
                }

                await _dbTeleBilling_V01Context.AddRangeAsync(telePhoneNumberAllocationPackages);

                await _dbTeleBilling_V01Context.SaveChangesAsync();

                await _iLogManagement.SaveAuditActionLog((int)EnumList.AuditLogActionType.AssignTelephone, loginUserName, userId, "Assign Telephone(" + telephoneNumberAllocation.TelephoneNumber + ")", (int)EnumList.ActionTemplateTypes.Assign, telephoneNumberAllocation.Id);

                responseAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Success);
                responseAC.Message    = _iStringConstant.TelephoneAssignedSuccessfully;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(responseAC);
        }
Beispiel #4
0
        public async Task <BulkAssignTelephoneResponseAC> BulkUploadOperatorCallLog(long userId, ExcelUploadResponseAC exceluploadDetail, string loginUserName)
        {
            BulkAssignTelephoneResponseAC bulkAssignTelephoneResponseAC = new BulkAssignTelephoneResponseAC();
            List <ExcelUploadResult>      excelUploadResultList         = new List <ExcelUploadResult>();
            List <Operatorcalllog>        operatorCallLogList           = new List <Operatorcalllog>();
            FileInfo fileinfo = new FileInfo(Path.Combine(exceluploadDetail.FilePath, exceluploadDetail.FileNameGuid));

            try
            {
                using (ExcelPackage package = new ExcelPackage(fileinfo))
                {
                    for (int i = 1; i <= package.Workbook.Worksheets.Count(); i++)
                    {
                        ExcelWorksheet workSheet = package.Workbook.Worksheets[i];
                        if (workSheet != null)
                        {
                            string sheetName   = workSheet.Name;
                            int    totalRows   = workSheet.Dimension.Rows;
                            int    totalColums = workSheet.Dimension.Columns;
                            for (int j = 1; j <= totalRows - 1; j++)
                            {
                                Operatorcalllog operatorCallLog = new Operatorcalllog();
                                bulkAssignTelephoneResponseAC.TotalRecords += 1;
                                string callDate = workSheet.Cells[j + 1, 1].Value != null ? workSheet.Cells[j + 1, 1].Value.ToString() : string.Empty;
                                if (!string.IsNullOrEmpty(callDate))
                                {
                                    DateTime newCallDate;
                                    if (DateTime.TryParse(callDate, out newCallDate))
                                    {
                                        String.Format("{0:d/MM/yyyy}", newCallDate);
                                        string pfNumber = workSheet.Cells[j + 1, 2].Value != null ? workSheet.Cells[j + 1, 2].Value.ToString() : string.Empty;
                                        pfNumber = !string.IsNullOrEmpty(pfNumber) ? pfNumber.ToLower().Trim() : string.Empty;
                                        MstEmployee mstEmployee = await _dbTeleBilling_V01Context.MstEmployee.FirstOrDefaultAsync(x => x.IsActive && !x.IsDelete && x.EmpPfnumber.ToLower().Trim() == pfNumber);

                                        if (mstEmployee != null)
                                        {
                                            string telephoneNumber = workSheet.Cells[j + 1, 3].Value != null ? workSheet.Cells[j + 1, 3].Value.ToString() : string.Empty;
                                            if (!string.IsNullOrEmpty(telephoneNumber))
                                            {
                                                if (telephoneNumber.Length < 50)
                                                {
                                                    string provider = workSheet.Cells[j + 1, 4].Value != null ? workSheet.Cells[j + 1, 4].Value.ToString() : string.Empty;
                                                    provider = !string.IsNullOrEmpty(provider) ? provider.ToLower().Trim() : string.Empty;
                                                    TeleBillingUtility.Models.Provider providerObj = await _dbTeleBilling_V01Context.Provider.FirstOrDefaultAsync(x => x.IsActive && !x.IsDelete && x.Name.ToLower().Trim() == provider);

                                                    if (providerObj != null)
                                                    {
                                                        string callType = workSheet.Cells[j + 1, 5].Value != null ? workSheet.Cells[j + 1, 5].Value.ToString() : string.Empty;
                                                        callType = !string.IsNullOrEmpty(callType) ? callType.ToLower().Trim() : string.Empty;
                                                        FixCalltype callTypeObj = await _dbTeleBilling_V01Context.FixCalltype.FirstOrDefaultAsync(x => x.IsActive && x.Name.ToLower().Trim() == callType);

                                                        if (callTypeObj != null)
                                                        {
                                                            operatorCallLog.CallDate        = newCallDate;
                                                            operatorCallLog.CallTypeId      = callTypeObj.Id;
                                                            operatorCallLog.ProviderId      = providerObj.Id;
                                                            operatorCallLog.EmployeeId      = mstEmployee.UserId;
                                                            operatorCallLog.EmpPfnumber     = mstEmployee.EmpPfnumber;
                                                            operatorCallLog.ExtensionNumber = mstEmployee.ExtensionNumber;
                                                            operatorCallLog.TransactionId   = _iLogManagement.GenerateTeleBillingTransctionID();
                                                            operatorCallLog.DialedNumber    = telephoneNumber;
                                                            operatorCallLog.CreatedBy       = userId;
                                                            operatorCallLog.CreatedDate     = DateTime.Now;
                                                            operatorCallLogList.Add(operatorCallLog);
                                                            bulkAssignTelephoneResponseAC.SuccessRecords += 1;
                                                        }
                                                        else
                                                        {
                                                            //Call Type Not Exists
                                                            bulkAssignTelephoneResponseAC.SkipRecords += 1;
                                                            excelUploadResultList = AddedFileDataResponse(4, j, callType, _iStringConstant.CallTypeNotExists, sheetName, excelUploadResultList);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        //Provider Not Exists
                                                        bulkAssignTelephoneResponseAC.SkipRecords += 1;
                                                        excelUploadResultList = AddedFileDataResponse(4, j, provider, _iStringConstant.ProviderNotExists, sheetName, excelUploadResultList);
                                                    }
                                                }
                                                else
                                                {
                                                    //Telephone Number length
                                                    bulkAssignTelephoneResponseAC.SkipRecords += 1;
                                                    excelUploadResultList = AddedFileDataResponse(3, j, telephoneNumber, _iStringConstant.TelePhoneNumberMaxLength, sheetName, excelUploadResultList);
                                                }
                                            }
                                            else
                                            {
                                                //Telephone number is empty
                                                bulkAssignTelephoneResponseAC.SkipRecords += 1;
                                                excelUploadResultList = AddedFileDataResponse(3, j, telephoneNumber, _iStringConstant.TelePhoneNumberIsEmpty, sheetName, excelUploadResultList);
                                            }
                                        }
                                        else
                                        {
                                            //Employee Not Exists
                                            bulkAssignTelephoneResponseAC.SkipRecords += 1;
                                            excelUploadResultList = AddedFileDataResponse(2, j, pfNumber, _iStringConstant.EmployeeNotExists, sheetName, excelUploadResultList);
                                        }
                                    }
                                    else
                                    {
                                        //Start Date Not Valid
                                        bulkAssignTelephoneResponseAC.SkipRecords += 1;
                                        excelUploadResultList = AddedFileDataResponse(1, j + 1, callDate, _iStringConstant.CallDateNotValid, sheetName, excelUploadResultList);
                                    }
                                }
                                else
                                {       //Call Date Is Empty
                                    bulkAssignTelephoneResponseAC.SkipRecords += 1;
                                    excelUploadResultList = AddedFileDataResponse(1, j, callDate, _iStringConstant.CallDateIsEmpty, sheetName, excelUploadResultList);
                                }
                            }
                        }
                    }
                }
                if (File.Exists(Path.Combine(exceluploadDetail.FilePath, exceluploadDetail.FileNameGuid)))
                {
                    File.Delete(Path.Combine(exceluploadDetail.FilePath, exceluploadDetail.FileNameGuid));
                }

                if (operatorCallLogList.Any())
                {
                    await _dbTeleBilling_V01Context.AddRangeAsync(operatorCallLogList);

                    await _dbTeleBilling_V01Context.SaveChangesAsync();

                    await _iLogManagement.SaveAuditActionLog((int)EnumList.AuditLogActionType.BulkUploadOperatorCallLog, loginUserName, userId, "Bulk Operator call log", (int)EnumList.ActionTemplateTypes.Upload, null);
                }
                bulkAssignTelephoneResponseAC.excelUploadResultList = excelUploadResultList;
                return(bulkAssignTelephoneResponseAC);
            }
            catch (Exception ex)
            {
                if (File.Exists(Path.Combine(exceluploadDetail.FilePath, exceluploadDetail.FileNameGuid)))
                {
                    File.Delete(Path.Combine(exceluploadDetail.FilePath, exceluploadDetail.FileNameGuid));
                }
                throw ex;
            }
        }
        public async Task <BulkAssignTelephoneResponseAC> BulkUploadProviderWiseTrans(long userId, ExcelUploadResponseAC exceluploadDetail, long providerId, string loginUserName)
        {
            BulkAssignTelephoneResponseAC bulkAssignTelephoneResponseAC = new BulkAssignTelephoneResponseAC();
            List <ExcelUploadResult>      excelUploadResultList         = new List <ExcelUploadResult>();
            List <Transactiontypesetting> transactionTypeSettingList    = new List <Transactiontypesetting>();
            FileInfo fileinfo = new FileInfo(Path.Combine(exceluploadDetail.FilePath, exceluploadDetail.FileNameGuid));

            try
            {
                using (ExcelPackage package = new ExcelPackage(fileinfo))
                {
                    for (int i = 1; i <= package.Workbook.Worksheets.Count(); i++)
                    {
                        ExcelWorksheet workSheet   = package.Workbook.Worksheets[i];
                        string         sheetName   = package.Workbook.Worksheets[i].Name;
                        int            totalRows   = workSheet.Dimension.Rows;
                        int            totalColums = workSheet.Dimension.Columns;
                        for (int j = 1; j <= totalRows - 1; j++)
                        {
                            Transactiontypesetting transactionTypeSetting = new Transactiontypesetting();
                            bulkAssignTelephoneResponseAC.TotalRecords += 1;
                            string transactionType = workSheet.Cells[j + 1, 1].Value != null ? workSheet.Cells[j + 1, 1].Value.ToString() : string.Empty;
                            if (!string.IsNullOrEmpty(transactionType))
                            {
                                if (!await _dbTeleBilling_V01Context.Transactiontypesetting.AnyAsync(x => x.ProviderId == providerId && !x.IsDelete && x.TransactionType.ToLower().Trim() == transactionType.ToLower().Trim()))
                                {
                                    transactionTypeSetting.ProviderId      = providerId;
                                    transactionTypeSetting.TransactionType = transactionType.Trim();
                                    transactionTypeSetting.CreatedBy       = userId;
                                    transactionTypeSetting.CreatedDate     = DateTime.Now;
                                    transactionTypeSetting.TransactionId   = _iLogManagement.GenerateTeleBillingTransctionID();

                                    bulkAssignTelephoneResponseAC.SuccessRecords += 1;
                                    transactionTypeSettingList.Add(transactionTypeSetting);
                                }
                                else
                                {
                                    //PhoneNumber Not Exists
                                    bulkAssignTelephoneResponseAC.SkipRecords += 1;
                                    excelUploadResultList = AddedFileDataResponse(1, j + 1, transactionType, _iStringConstant.ProviderWiseTransactionTypeAlreadyExists, sheetName, excelUploadResultList);
                                }
                            }
                            else
                            {
                                //PhoneNumber Not Exists
                                bulkAssignTelephoneResponseAC.SkipRecords += 1;
                                excelUploadResultList = AddedFileDataResponse(1, j + 1, transactionType, _iStringConstant.TransactionTypeIsEmpty, sheetName, excelUploadResultList);
                            }
                        }
                    }
                }

                if (File.Exists(Path.Combine(exceluploadDetail.FilePath, exceluploadDetail.FileNameGuid)))
                {
                    File.Delete(Path.Combine(exceluploadDetail.FilePath, exceluploadDetail.FileNameGuid));
                }

                if (transactionTypeSettingList.Any())
                {
                    await _dbTeleBilling_V01Context.AddRangeAsync(transactionTypeSettingList);

                    await _dbTeleBilling_V01Context.SaveChangesAsync();

                    await _iLogManagement.SaveAuditActionLog((int)EnumList.AuditLogActionType.BulkUploadTransactionType, loginUserName, userId, "Provider wise transaction", (int)EnumList.ActionTemplateTypes.Upload, null);
                }
                bulkAssignTelephoneResponseAC.excelUploadResultList = excelUploadResultList;
                return(bulkAssignTelephoneResponseAC);
            }
            catch (Exception ex)
            {
                if (File.Exists(Path.Combine(exceluploadDetail.FilePath, exceluploadDetail.FileNameGuid)))
                {
                    File.Delete(Path.Combine(exceluploadDetail.FilePath, exceluploadDetail.FileNameGuid));
                }
                throw ex;
            }
        }
        public async Task <ResponseAC> AddExcelMapping(ExcelMappingAC excelMappingAC, long userId, string loginUserName)
        {
            ResponseAC responeAC = new ResponseAC();

            try
            {
                if (excelMappingAC.dbfieldList.Count() == 0)
                {
                    responeAC.Message    = "Mapping Column Is Missing";
                    responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Error);
                    return(responeAC);
                }

                if (excelMappingAC != null)
                {
                    bool IsExistsServices = false;
                    IsExistsServices = await checkExcelMappingExistsForServices(excelMappingAC);

                    if (IsExistsServices)
                    {
                        responeAC.Message    = "excel mapping is already exists";
                        responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Error);
                        return(responeAC);
                    }
                }

                if ((await _dbTeleBilling_V01Context.Mappingexcel.FirstOrDefaultAsync(x => x.ProviderId == excelMappingAC.ProviderId && x.ServiceTypeId == excelMappingAC.ServiceTypeId && !x.IsDelete)) == null)
                {
                    var providerData = await _dbTeleBilling_V01Context.Provider.FirstOrDefaultAsync(x => x.Id == excelMappingAC.ProviderId);

                    Mappingexcel mappingexcel = new Mappingexcel();
                    mappingexcel.Id                      = 0;
                    mappingexcel.IsActive                = true;
                    mappingexcel.ProviderId              = excelMappingAC.ProviderId;
                    mappingexcel.CurrencyId              = providerData.CurrencyId;
                    mappingexcel.ServiceTypeId           = excelMappingAC.ServiceTypeId;
                    mappingexcel.HaveHeader              = excelMappingAC.HaveHeader;
                    mappingexcel.HaveTitle               = excelMappingAC.HaveTitle;
                    mappingexcel.TitleName               = excelMappingAC.TitleName;
                    mappingexcel.WorkSheetNo             = Convert.ToInt64(excelMappingAC.WorkSheetNo);
                    mappingexcel.ExcelColumnNameForTitle = string.IsNullOrEmpty(excelMappingAC.ExcelColumnNameForTitle) ? "" : excelMappingAC.ExcelColumnNameForTitle;
                    mappingexcel.ExcelReadingColumn      = string.IsNullOrEmpty(excelMappingAC.ExcelReadingColumn) ? "0" : excelMappingAC.ExcelReadingColumn;
                    mappingexcel.CreatedBy               = userId;
                    mappingexcel.CreatedDate             = DateTime.Now;
                    mappingexcel.IsCommonMapped          = false;
                    mappingexcel.MappedMappingId         = 0;
                    mappingexcel.MappedServiceTypeId     = 0;
                    mappingexcel.IsDelete                = false;


                    mappingexcel.TransactionId = _iLogManagement.GenerateTeleBillingTransctionID();

                    await _dbTeleBilling_V01Context.AddAsync(mappingexcel);

                    await _dbTeleBilling_V01Context.SaveChangesAsync();

                    responeAC.Message    = _iStringConstant.ExcelMappingAddedSuccessfully;
                    responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Success);
                    await _iLogManagement.SaveAuditActionLog((int)EnumList.AuditLogActionType.AddExcelMapping, loginUserName, userId, "Excel mapping", (int)EnumList.ActionTemplateTypes.Add, mappingexcel.Id);

                    if (mappingexcel.Id > 0)
                    {
                        #region ---> Add Common Servive if exists
                        foreach (var serviceType in excelMappingAC.ServiceTypeIdInline)
                        {
                            Mappingexcel mappingexcelCommon = new Mappingexcel();
                            mappingexcelCommon.Id                      = 0;
                            mappingexcelCommon.IsActive                = true;
                            mappingexcelCommon.ProviderId              = excelMappingAC.ProviderId;
                            mappingexcelCommon.CurrencyId              = providerData.CurrencyId;
                            mappingexcelCommon.ServiceTypeId           = serviceType.Id;
                            mappingexcelCommon.HaveHeader              = excelMappingAC.HaveHeader;
                            mappingexcelCommon.HaveTitle               = excelMappingAC.HaveTitle;
                            mappingexcelCommon.TitleName               = excelMappingAC.TitleName;
                            mappingexcelCommon.WorkSheetNo             = Convert.ToInt64(excelMappingAC.WorkSheetNo);
                            mappingexcelCommon.ExcelColumnNameForTitle = excelMappingAC.ExcelColumnNameForTitle;
                            mappingexcelCommon.ExcelReadingColumn      = string.IsNullOrEmpty(excelMappingAC.ExcelReadingColumn) ? "" : excelMappingAC.ExcelReadingColumn;
                            mappingexcelCommon.CreatedBy               = userId;
                            mappingexcelCommon.CreatedDate             = DateTime.Now;
                            mappingexcelCommon.TransactionId           = mappingexcel.TransactionId;
                            mappingexcelCommon.IsCommonMapped          = true;
                            mappingexcelCommon.MappedMappingId         = mappingexcel.Id;
                            mappingexcelCommon.MappedServiceTypeId     = mappingexcel.ServiceTypeId;

                            await _dbTeleBilling_V01Context.AddAsync(mappingexcelCommon);

                            await _dbTeleBilling_V01Context.SaveChangesAsync();
                        }

                        #endregion


                        #region --> ADD Mapping column Details
                        if (excelMappingAC.dbfieldList.Count() > 0)
                        {
                            List <Mappingexcelcolumn> mappingExcelColumnslst = new List <Mappingexcelcolumn>();

                            foreach (var item in excelMappingAC.dbfieldList)
                            {
                                if (!string.IsNullOrEmpty(item.ColumnAddress))
                                {
                                    Mappingexcelcolumn excelColumn = new Mappingexcelcolumn();
                                    excelColumn.MappingExcelId            = mappingexcel.Id;
                                    excelColumn.MappingServiceTypeFieldId = item.Id;
                                    excelColumn.ExcelcolumnName           = item.ColumnAddress;
                                    excelColumn.FormatField = item.FormatField;
                                    mappingExcelColumnslst.Add(excelColumn);
                                }
                            }
                            await _dbTeleBilling_V01Context.AddRangeAsync(mappingExcelColumnslst);

                            await _dbTeleBilling_V01Context.SaveChangesAsync();

                            responeAC.Message    = _iStringConstant.ExcelMappingAddedSuccessfully;
                            responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Success);
                        }
                        #endregion
                    }
                }
                else
                {
                    responeAC.Message    = _iStringConstant.ExcelMappingExists;
                    responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Error);
                }
                return(responeAC);
            }
            catch (Exception e)
            {
                responeAC.Message    = e.Message.ToString();
                responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Error);
                return(responeAC);
            }
        }
        public async Task <ResponseAC> AddMemo(MemoAC memoAC, long userId, string loginUserName)
        {
            ResponseAC responseAC = new ResponseAC();
            Memo       memo       = _mapper.Map <Memo>(memoAC);

            memo.Id            = 0;
            memo.CreatedBy     = userId;
            memo.CreatedDate   = DateTime.Now;
            memo.TransactionId = _iLogManagement.GenerateTeleBillingTransctionID();
            memo.RefrenceNo    = memoAC.ProviderName + "/INV/" + memoAC.Month + "/" + memo.Year;
            _dbTeleBilling_V01Context.Add(memo);
            await _dbTeleBilling_V01Context.SaveChangesAsync();

            List <Memobills>  billMemos   = new List <Memobills>();
            List <Billmaster> billMasters = new List <Billmaster>();

            foreach (long item in memoAC.BillIds)
            {
                Memobills memoBill = new Memobills();
                memoBill.BillId        = item;
                memoBill.MemoId        = memo.Id;
                memoBill.TransactionId = memo.TransactionId;
                memoBill.CreatedBy     = userId;
                memoBill.CreatedDate   = DateTime.Now;
                billMemos.Add(memoBill);

                Billmaster billMaster = await _dbTeleBilling_V01Context.Billmaster.FirstOrDefaultAsync(x => x.Id == item);

                billMaster.UpdatedBy    = userId;
                billMaster.BillStatusId = Convert.ToInt16(EnumList.BillStatus.MemoCreated);
                billMaster.UpdatedDate  = DateTime.Now;
                billMasters.Add(billMaster);
            }

            if (billMemos.Any())
            {
                await _dbTeleBilling_V01Context.AddRangeAsync(billMemos);

                await _dbTeleBilling_V01Context.SaveChangesAsync();
            }


            if (billMasters.Any())
            {
                _dbTeleBilling_V01Context.UpdateRange(billMasters);
                await _dbTeleBilling_V01Context.SaveChangesAsync();

                memo = await _dbTeleBilling_V01Context.Memo.Where(x => x.Id == memo.Id && !x.IsDelete).Include(x => x.Provider).FirstOrDefaultAsync();

                #region Send Mail For Create Memo
                TeleBillingUtility.Models.Configuration configuration = await _dbTeleBilling_V01Context.Configuration.FirstOrDefaultAsync();

                List <MstEmployee> mstEmployees = await _dbTeleBilling_V01Context.MstEmployee.Where(x => !x.IsDelete && x.IsActive && x.IsPresidentOffice).ToListAsync();

                if (configuration != null && configuration.NSendMemo)
                {
                    foreach (var item in billMasters)
                    {
                        if (mstEmployees.Any())
                        {
                            foreach (var employee in mstEmployees)
                            {
                                if (!string.IsNullOrEmpty(employee.EmailId))
                                {
                                    Emailtemplate emailTemplate = new Emailtemplate();
                                    Dictionary <string, string> replacements = new Dictionary <string, string>();
                                    EnumList.Month month = (EnumList.Month)item.BillMonth;

                                    replacements.Add("{BillMonth}", month.ToString());
                                    replacements.Add("{BillYear}", item.BillYear.ToString());
                                    replacements.Add("{RefrenceNo}", memo.RefrenceNo);
                                    replacements.Add("{newEmpName}", employee.FullName);
                                    replacements.Add("{MemoSubject}", memo.Subject);
                                    replacements.Add("{BillNumber}", item.BillNumber);
                                    replacements.Add("{BillAmount}", memo.TotalAmount.ToString());
                                    replacements.Add("{Provider}", memo.Provider.Name);

                                    if (await _iEmailSender.SendEmail(Convert.ToInt64(EnumList.EmailTemplateType.SendMemo), replacements, employee.EmailId))
                                    {
                                        await _iEmailSender.AddedReminderNotificationLog(Convert.ToInt64(EnumList.EmailTemplateType.SendMemo), null, false, employee.EmailId);
                                    }
                                }
                            }
                        }
                    }
                }
                #endregion


                #region Notification For Memo
                List <Notificationlog> notificationlogs = new List <Notificationlog>();
                if (mstEmployees.Any())
                {
                    foreach (var item in mstEmployees)
                    {
                        notificationlogs.Add(_iLogManagement.GenerateNotificationObject(item.UserId, userId, Convert.ToInt16(EnumList.NotificationType.SendMemo), memo.Id));
                    }
                    await _iLogManagement.SaveNotificationList(notificationlogs);
                }
                #endregion
            }

            await _iLogManagement.SaveAuditActionLog((int)EnumList.AuditLogActionType.AddMemo, loginUserName, userId, "Memo(" + memo.RefrenceNo + ")", (int)EnumList.ActionTemplateTypes.Add, memo.Id);

            responseAC.Message    = _iStringConstant.MemoAddedsuccessfully;
            responseAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Success);

            return(responseAC);
        }