예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="vouchersUploadModel"></param>
        /// <returns></returns>
        public bool AddProcessVouchersUpload(ProcessVouchersUploadModel processVouchersUploadModel)
        {
            try
            {
                // update
                if (processVouchersUploadModel.Id > 0)
                {
                    // retriever record
                    var processVoucher = _dbContext.ProcessVouchersUploads.Where(x => x.Id == processVouchersUploadModel.Id && !x.IsDeleted).FirstOrDefault();
                    if (processVoucher != null)
                    {
                        processVoucher.ErrorMsg   = processVouchersUploadModel.ErrorMsg;
                        processVoucher.Status     = processVouchersUploadModel.Status;
                        processVoucher.ModefiedOn = System.DateTime.Now;
                        processVoucher.CsvContent = processVouchersUploadModel.CsvContent;//System.DateTime.Now;
                    }
                }
                else
                {
                    //add new records here
                    ProcessVouchersUpload processVouchersUpload = new ProcessVouchersUpload()
                    {
                        UploadId   = processVouchersUploadModel.UploadId,
                        Status     = processVouchersUploadModel.Status,
                        CreatedOn  = DateTime.Now,
                        ErrorMsg   = processVouchersUploadModel.ErrorMsg,
                        CsvContent = processVouchersUploadModel.CsvContent
                    };
                    //
                    _dbContext.ProcessVouchersUploads.Add(processVouchersUpload);
                    processVouchersUploadModel.Id = processVouchersUpload.Id;
                }


                _dbContext.SaveChanges();
                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="fileLocation"></param>
        /// <param name="relativeExcelPath"></param>
        /// <param name="IsFirstRowAsColumnNames"></param>
        /// <returns></returns>
        public async Task <bool> SaveProcessedToDb(VouchersUploadModel vouchersUploadModel)
        {
            int successCount    = 0; // coupons successfully inserted
            int notSuccessCount = 0; // coupons not successfully inserted
            int totalProcessed  = 0; // to track the current row of the sheet been iterated

            SunwingVouchersEntities context         = new SunwingVouchersEntities();
            IssuanceManager         issuanceManager = new IssuanceManager(context);

            // added for testing, remove this line for production
            vouchersUploadModel.IsFirstRowAsColumnNames = true;
            List <string> ErrorMassage = new List <string>();

            try
            {
                using (var reader = new StreamReader(vouchersUploadModel.UploadContent))
                {
                    List <string> csvRows = new List <string>();
                    while (!reader.EndOfStream)
                    {
                        var line   = reader.ReadLine();
                        var values = line.Split(';');
                        csvRows.Add(values[0]);
                    }
                    // if first row is header remove that
                    if (vouchersUploadModel.IsFirstRowAsColumnNames && csvRows.Count > 1)
                    {
                        csvRows.RemoveAt(0);
                    }
                    // check for validation for each row
                    //read row data one by one
                    foreach (var rowItem in csvRows)
                    {
                        // validate each row
                        // and save the status to database
                        // with status
                        var validationData = CsvRowValidate(rowItem);
                        ProcessVouchersUploadModel processVouchersUploadModel = new ProcessVouchersUploadModel();
                        processVouchersUploadModel.UploadId = vouchersUploadModel.Id;
                        // if no error
                        if (!validationData.Item1)
                        {
                            var voucher = await AddNewVoucher(validationData.Item3);

                            if (voucher.IsSuccess)
                            {
                                // add the data of iterated csv row into db
                                // add the column Content For holding all the processed Data  here change
                                processVouchersUploadModel.CsvContent = JsonConvert.SerializeObject(voucher);
                                processVouchersUploadModel.Status     = (int)ProcessVouchersUploadStatus.Success;
                                successCount++;
                            }
                            else
                            {
                                processVouchersUploadModel.Status   = (int)ProcessVouchersUploadStatus.NotSuccess;
                                processVouchersUploadModel.ErrorMsg = voucher.ErrorMsg;
                                notSuccessCount++;
                            }
                            //save the status in ProcessVouchersUpload  with status success
                        }
                        else
                        {
                            //save the status in ProcessVouchersUpload with status not success
                            processVouchersUploadModel.Status   = (int)ProcessVouchersUploadStatus.NotSuccess;
                            processVouchersUploadModel.ErrorMsg = "Row No " + totalProcessed + " process with errors: " + string.Join(", ", validationData.Item2
                                                                                                                                      .Select(p => p.ToString()));// validationData.Item2.ToString();
                            notSuccessCount++;
                        }
                        issuanceManager.AddProcessVouchersUpload(processVouchersUploadModel);
                        totalProcessed++;
                    }
                }
                //
                vouchersUploadModel.Status = (int)VouchersUploadStatus.IssuedWithSuccess;
                vouchersUploadModel.SuccessfullyProcessed    = successCount;
                vouchersUploadModel.NotSuccessfullyProcessed = notSuccessCount;
                vouchersUploadModel.TotalProcessed           = totalProcessed;
                issuanceManager.AddVouchersUpload(vouchersUploadModel);
                return(true);
            }
            catch (Exception ex)
            {
                // add total process and unprocessed
                vouchersUploadModel.Status = (int)VouchersUploadStatus.IssuedWithNotSucces;
                issuanceManager.AddVouchersUpload(vouchersUploadModel);
                return(false);
            }
        }