Example #1
0
        private FormularyEditModel GetFormularyEditModel(FormularyHeaderAPIModel formulariesfromAPI)
        {
            var vmProvider = new FormularyEditViewModelProvider(this._mapper, this.HttpContext)
            {
                ApiModelProvider = () => formulariesfromAPI
            };

            return(vmProvider.GetFormularyEditVM());
        }
Example #2
0
 private List <CodeNameSelectorModel> GetLocalRoutes(FormularyHeaderAPIModel src, string routeFieldType_Cd)
 {
     if (src == null || !src.FormularyLocalRouteDetails.IsCollectionValid())
     {
         return(null);
     }
     return(src.FormularyLocalRouteDetails
            .Where(rec => rec.RouteFieldTypeCd == routeFieldType_Cd)
            .Select(rec => ConvertStringFromAPIToCodeNameModelWithDefaults(rec.RouteCd, rec.Source, null)).ToList());
 }
            public FormularyDetailAPIModel Resolve(FormularyEditModel source, FormularyHeaderAPIModel destination, FormularyDetailAPIModel destMember, ResolutionContext context)
            {
                if (destination == null || source == null)
                {
                    return(null);
                }

                var detail = context.Mapper.Map <FormularyDetailAPIModel>(source);

                return(detail);
            }
            public List <FormularyAdditionalCodeAPIModel> Resolve(FormularyEditModel source, FormularyHeaderAPIModel destination, List <FormularyAdditionalCodeAPIModel> destMember, ResolutionContext context)
            {
                var additionalCodes = new List <FormularyAdditionalCodeAPIModel>();

                if (destination == null)
                {
                    return(additionalCodes);
                }

                if (source.FormularyClassificationCodes.IsCollectionValid())
                {
                    additionalCodes = context.Mapper.Map <List <FormularyAdditionalCodeAPIModel> >(source.FormularyClassificationCodes);
                    additionalCodes.Each(rec => rec.CodeType = "Classification");
                }
                if (source.FormularyIdentificationCodes.IsCollectionValid())
                {
                    var idenCodes = context.Mapper.Map <List <FormularyAdditionalCodeAPIModel> >(source.FormularyIdentificationCodes);
                    idenCodes.Each(rec => rec.CodeType = "Identification");
                    additionalCodes.AddRange(idenCodes);
                }

                return(additionalCodes);
            }
 public VMPFormularyEditVMBuilder(IMapper mapper, HttpContext httpContext, FormularyHeaderAPIModel apiModel)
 {
     _mapper      = mapper;
     _httpContext = httpContext;
     _apiModel    = apiModel;
 }
Example #6
0
        public async Task <IActionResult> ExcelImport()
        {
            string token = HttpContext.Session.GetString("access_token");

            int.TryParse(_configuration["SynapseCore:Settings:FileImportBatchSize"], out int batSizeForFileFromConfig);

            var retries = 0;

            var responseStringBuilder = new StringBuilder();

            IFormFile xlFile = Request.Form.Files[0];

            var colmsConfigured = GetColumnDetailsFromConfig;

            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            var xlFileXtn = Path.GetExtension(xlFile.FileName).ToLower();

            if (xlFileXtn != ".xls" && xlFileXtn != ".xlsx")
            {
                return(StatusCode((int)HttpStatusCode.NotAcceptable));
            }

            //var dirPath = CreateDirectory();

            if (xlFile.Length > 0)
            {
                //string fullPath = Path.Combine(dirPath, xlFile.FileName);

                //using (var stream = System.IO.File.Create(fullPath))
                //{
                //    await xlFile.CopyToAsync(stream);
                //}
                var requests = new List <FormularyHeaderAPIModel>();

                using (var reader = ExcelReaderFactory.CreateReader(xlFile.OpenReadStream()))
                {
                    var result = reader.AsDataSet(new ExcelDataSetConfiguration()
                    {
                        ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
                        {
                            UseHeaderRow = true,
                        }
                    }).Tables[0];// get the first sheet data with index 0.

                    var rowData = GetRowData(colmsConfigured);

                    //var totalBatches = (result.Rows.Count) / 500;

                    //List<int> source = Enumerable.Range(1, 19).ToList();
                    //int batchsize = 10;
                    //List<List<int>> batches = new List<List<int>>();
                    //for (int i = 0; i < source.Count; i += batchsize)
                    //{
                    //    var batch = source.Skip(i).Take(batchsize);
                    //    batches.Add(batch.ToList());
                    //}

                    var batchsize = batSizeForFileFromConfig;

                    var batchedRequests = new List <List <FormularyHeaderAPIModel> >();

                    for (var rowIndex = 0; rowIndex < result.Rows.Count; rowIndex++)
                    {
                        var row = result.Rows[rowIndex];

                        if (!CanProcessRow(row, colmsConfigured))
                        {
                            continue;
                        }

                        var requestRow = new FormularyHeaderAPIModel
                        {
                            Detail = new FormularyDetailAPIModel(),
                            FormularyRouteDetails = new List <FormularyRouteDetailAPIModel>()
                        };

                        colmsConfigured.Keys.Each(k =>
                        {
                            if (rowData.ContainsKey(k))
                            {
                                rowData[k](row, requestRow);
                            }
                        });

                        requests.Add(requestRow);
                    }

                    for (var reqIndex = 0; reqIndex < requests.Count; reqIndex += batchsize)
                    {
                        var batches = requests.Skip(reqIndex).Take(batchsize);
                        batchedRequests.Add(batches.ToList());
                    }

                    //for (var rowIndex = 0; rowIndex < result.Rows.Count; rowIndex++)
                    //for (var rowIndex = 0; rowIndex < result.Rows.Count; rowIndex += batchsize)
                    //{
                    //    var requests = new List<CreateFormularyAPIRequest>();

                    //    var row = result.Rows[rowIndex];

                    //    if (!CanProcessRow(row, colmsConfigured)) continue;

                    //    var requestRow = new CreateFormularyAPIRequest
                    //    {
                    //        Detail = new CreateFormularyDetailAPIRequest(),
                    //        FormularyRouteDetails = new List<CreateFormularyRouteDetailAPIRequest>()
                    //    };

                    //    colmsConfigured.Keys.Each(k =>
                    //    {
                    //        if (rowData.ContainsKey(k))
                    //            rowData[k](row, requestRow);
                    //    });

                    //    requests.Add(requestRow);

                    //    batchedRequests.Add(requests);

                    //    //var response = await DataService.TerminologyAPIService.FileImportMedication(requests, token);


                    //    //FormatResponseMessage(response, requestRow, responseStringBuilder);
                    //}

                    foreach (var batchReq in batchedRequests)
                    {
                        retries = 0;
                        try
                        {
                            var response = await DataService.TerminologyAPIService.FileImportMedication(batchReq, token);

                            FormatResponseMessageForBulk(response, responseStringBuilder);
                            await Task.Delay(200);

                            if (response.StatusCode == DataService.APIModel.StatusCode.Fail)
                            {
                                await RetryPosting(batchReq);
                            }
                        }
                        catch (Exception ex)
                        {
                            if (retries == 0)
                            {
                                await RetryPosting(batchReq);
                            }
                            else
                            {
                                throw ex;
                            }
                        }
                    }
                }

                async Task RetryPosting(List <FormularyHeaderAPIModel> batchReq)
                {
                    if (retries >= 3)
                    {
                        throw new Exception("Exhausted re-tries during formulary file import");
                    }

                    try
                    {
                        retries++;
                        var response = await DataService.TerminologyAPIService.FileImportMedication(batchReq, token);

                        FormatResponseMessageForBulk(response, responseStringBuilder);

                        await Task.Delay(200);

                        if (response.StatusCode == DataService.APIModel.StatusCode.Fail)
                        {
                            await RetryPosting(batchReq);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (retries <= 2)
                        {
                            await RetryPosting(batchReq);
                        }
                        else
                        {
                            throw ex;
                        }
                    }
                }

                var codesInExcel = new List <string>();

                if (requests.IsCollectionValid())
                {
                    codesInExcel = requests.Select(rec => rec.Code).ToList();
                }

                await UploadNonFormulariesInDMD(codesInExcel, token, responseStringBuilder);

                await DataService.TerminologyAPIService.InvokePostImportProcess(token);
            }

            //return Ok("Uploaded successfully");
            return(Json(responseStringBuilder.ToString()));
        }
Example #7
0
        public async Task <IActionResult> UpdateFormulary(FormularyEditModel editedData)
        {
            BulkFormularyEditModel bulkEditedData = null;

            string token = HttpContext.Session.GetString("access_token");

            var partialView = GetFormularyEditView(editedData.ProductType);

            if (editedData.IsBulkEdit)
            {
                bulkEditedData = editedData as BulkFormularyEditModel;
                partialView    = GetFormularyEditViewForBulkEdit(editedData.ProductType);
            }


            if (!ModelState.IsValid)
            {
                await FillLookupsToViewBag(editedData.OriginalStatus);

                editedData.IsSaveSuccessful = false;
                return(PartialView(partialView, editedData));
            }

            var apiModels = new List <FormularyHeaderAPIModel>();

            var uniqueIds = editedData.FormularyVersionIds;

            foreach (var rec in uniqueIds)
            {
                FormularyHeaderAPIModel apiModel = null;

                if (editedData.IsBulkEdit)
                {
                    var orginalObj = JsonConvert.DeserializeObject <BulkFormularyEditModel>(bulkEditedData.SerializedOriginalObj);

                    var edDataDeserializedObj = _mapper.Map <BulkFormularyEditModel>(bulkEditedData);

                    await MergeOnlyModified(edDataDeserializedObj, orginalObj, rec);

                    apiModel = _mapper.Map <FormularyHeaderAPIModel>(edDataDeserializedObj);
                }
                else
                {
                    apiModel = _mapper.Map <FormularyHeaderAPIModel>(editedData);
                }

                apiModel.FormularyVersionId = rec;
                apiModel.RecStatusCode      = apiModel.RecStatusCode; //editedData.IsBulkEdit ? null : apiModel.RecStatusCode;//For bulk-edit mode - Record status is not editable
                apiModels.Add(apiModel);
            }

            TerminologyAPIResponse <UpdateFormularyAPIResponse> response = await TerminologyAPIService.UpdateFormulary(apiModels, token);

            if (response.StatusCode != DataService.APIModel.StatusCode.Success)
            {
                await FillLookupsToViewBag(editedData.OriginalStatus);

                _toastNotification.AddErrorToastMessage(string.Join('\n', response.ErrorMessages));

                editedData.IsSaveSuccessful = false;

                return(PartialView(partialView, editedData));
            }

            if (response.StatusCode == DataService.APIModel.StatusCode.Success)
            {
                if (response.Data.Status != null && response.Data.Status.ErrorMessages.IsCollectionValid())
                {
                    var errors = string.Join('\n', response.Data.Status.ErrorMessages);

                    _toastNotification.AddInfoToastMessage(errors);

                    await FillLookupsToViewBag(editedData.OriginalStatus);

                    editedData.IsSaveSuccessful = true;

                    return(PartialView(partialView, editedData));
                }
            }

            _toastNotification.AddSuccessToastMessage("Successfully Updated Formulary details");

            editedData.IsSaveSuccessful = true;

            return(Json(null));
        }