示例#1
0
            public async Task <FileUploadRespObj> Handle(UploadSupplierInformationCommand request, CancellationToken cancellationToken)
            {
                try
                {
                    var apiResponse = new FileUploadRespObj {
                        Status = new APIResponseStatus {
                            IsSuccessful = false, Message = new APIResponseMessage()
                        }
                    };

                    var files = _accessor.HttpContext.Request.Form.Files;

                    var byteList = new List <byte[]>();
                    foreach (var fileBit in files)
                    {
                        if (fileBit.Length > 0)
                        {
                            using (var ms = new MemoryStream())
                            {
                                await fileBit.CopyToAsync(ms);

                                byteList.Add(ms.ToArray());
                            }
                        }
                    }

                    var userId = _accessor.HttpContext.User?.FindFirst(x => x.Type == "userId").Value;

                    var uploadedRecord = new List <SupplierObj>();
                    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

                    if (byteList.Count() > 0)
                    {
                        foreach (var byteItem in byteList)
                        {
                            using (MemoryStream stream = new MemoryStream(byteItem))
                                using (ExcelPackage excelPackage = new ExcelPackage(stream))
                                {
                                    ExcelWorksheet workSheet    = excelPackage.Workbook.Worksheets[0];
                                    int            totalRows    = workSheet.Dimension.Rows;
                                    int            totalColumns = workSheet.Dimension.Columns;

                                    if (totalColumns != 14)
                                    {
                                        apiResponse.Status.Message.FriendlyMessage = "14 Columns Expected";
                                        return(apiResponse);
                                    }
                                    var item = new SupplierObj();
                                    for (int i = 2; i <= totalRows; i++)
                                    {
                                        item.ExcelLineNumber  = i;
                                        item.SupplierTypeName = workSheet.Cells[i, 1]?.Value != null ? workSheet.Cells[i, 1]?.Value.ToString() : string.Empty;
                                        item.Name             = workSheet.Cells[i, 2]?.Value != null ? workSheet.Cells[i, 2]?.Value.ToString() : string.Empty;
                                        item.Address          = workSheet.Cells[i, 3]?.Value != null ? workSheet.Cells[i, 3]?.Value.ToString() : string.Empty;
                                        item.PhoneNo          = workSheet.Cells[i, 4]?.Value != null ? workSheet.Cells[i, 4]?.Value.ToString() : string.Empty;
                                        item.Email            = workSheet.Cells[i, 5]?.Value != null ? workSheet.Cells[i, 5]?.Value.ToString() : string.Empty;
                                        item.RegistrationNo   = workSheet.Cells[i, 6]?.Value != null ? workSheet.Cells[i, 6]?.Value.ToString() : string.Empty;
                                        item.SupplierNumber   = workSheet.Cells[i, 7]?.Value != null ? workSheet.Cells[i, 7]?.Value.ToString() : string.Empty;
                                        item.CountryName      = workSheet.Cells[i, 8]?.Value != null ? workSheet.Cells[i, 8]?.Value.ToString() : string.Empty;
                                        item.StatusName       = workSheet.Cells[i, 9]?.Value != null ? workSheet.Cells[i, 9]?.Value.ToString() : string.Empty;
                                        item.Website          = workSheet.Cells[i, 10]?.Value != null ? workSheet.Cells[i, 10]?.Value.ToString() : string.Empty;
                                        item.PostalAddress    = workSheet.Cells[i, 11]?.Value != null ? workSheet.Cells[i, 11]?.Value.ToString() : string.Empty;
                                        item.TaxIDorVATID     = workSheet.Cells[i, 12]?.Value != null ? workSheet.Cells[i, 12]?.Value.ToString() : string.Empty;
                                        item.WorkPermitName   = workSheet.Cells[i, 13]?.Value != null ? workSheet.Cells[i, 13]?.Value.ToString() : string.Empty;
                                        item.ParticularsName  = workSheet.Cells[i, 14]?.Value != null ? workSheet.Cells[i, 14]?.Value.ToString() : string.Empty;

                                        uploadedRecord.Add(item);
                                    }
                                }
                        }
                    }
                    var ItemList = await _repo.GetAllSupplierAsync();

                    var _SupplierType = await _repo.GetAllSupplierTypeAsync();

                    var _country = await _serverRequest.GetAllCountryAsync();

                    cor_supplier itemFrmRepo = new cor_supplier();
                    if (uploadedRecord.Count > 0)
                    {
                        foreach (var item in uploadedRecord)
                        {
                            if (string.IsNullOrEmpty(item.Name))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty Supplier name detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            else
                            {
                                if (item.Name.Split(" ").Length == 1)
                                {
                                    apiResponse.Status.Message.FriendlyMessage = $"Invalid Supplier name detected on line {item.ExcelLineNumber}";
                                    return(apiResponse);
                                }
                            }
                            itemFrmRepo = ItemList.FirstOrDefault(c => c.Name.ToLower().Trim() == item.Name.ToLower().Trim());
                            if (string.IsNullOrEmpty(item.SupplierTypeName))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty Supplier type detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            else
                            {
                                var type = _SupplierType.FirstOrDefault(w => w.SupplierTypeName.Trim().ToLower() == item.SupplierTypeName.Trim().ToLower());
                                if (type == null)
                                {
                                    apiResponse.Status.Message.FriendlyMessage = $"Undentified Supplier type detected on line {item.ExcelLineNumber}";
                                    return(apiResponse);
                                }
                                item.SupplierTypeId = type.SupplierTypeId;
                            }
                            if (string.IsNullOrEmpty(item.Email))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty cell on Email Column Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            else
                            {
                                try
                                {
                                    MailAddress m = new MailAddress(item.Email);
                                }
                                catch (FormatException)
                                {
                                    apiResponse.Status.Message.FriendlyMessage = $"Invalid Email Detected on line {item.ExcelLineNumber}";
                                    return(apiResponse);
                                }
                                var userEmailExist = _userManager.Users?.Where(w => w.Email.Trim().ToLower() == item.Email.Trim()).ToList();
                                if (userEmailExist.Count() > 1)
                                {
                                    apiResponse.Status.Message.FriendlyMessage = $"Duplicate Supplier Email Detected on line {item.ExcelLineNumber}";
                                    return(apiResponse);
                                }
                            }

                            if (string.IsNullOrEmpty(item.Address))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty cell on Address Column Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            if (string.IsNullOrEmpty(item.RegistrationNo))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty cell on Reg No Column Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            if (string.IsNullOrEmpty(item.StatusName))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty cell on Status name Column Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            else
                            {
                                if (!Enum.IsDefined(typeof(ApprovalStatus), item.StatusName))
                                {
                                    apiResponse.Status.Message.FriendlyMessage = $"Invalid Status Detected on line {item.ExcelLineNumber}";
                                    return(apiResponse);
                                }
                            }
                            if (string.IsNullOrEmpty(item.SupplierNumber) && item.StatusName.Trim().ToLower() != "pending")
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Status field of a Supplier without Supplier Number should be pending Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            if (!string.IsNullOrEmpty(item.SupplierNumber) && item.StatusName.Trim().ToLower() == "pending")
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Status field of a Supplier with Supplier Number should not be pending Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            if (!string.IsNullOrEmpty(item.SupplierNumber))
                            {
                                var supNumExist = await _repo.GetAllSupplierAsync();

                                if (supNumExist.Count() > 0)
                                {
                                    if (supNumExist?.Where(q => q.SupplierNumber.Trim().ToLower() == item.SupplierNumber.Trim().ToLower()).Count() > 1)
                                    {
                                        apiResponse.Status.Message.FriendlyMessage = $"Supplier with same supplier number already exist Detected on line {item.ExcelLineNumber}";
                                        return(apiResponse);
                                    }
                                }
                            }

                            if (string.IsNullOrEmpty(item.Address))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty cell on Email Column Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            if (string.IsNullOrEmpty(item.PhoneNo))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty cell on PhoneNo Column Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }

                            if (string.IsNullOrEmpty(item.Website))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty cell on Wwebsite Column Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            if (string.IsNullOrEmpty(item.PostalAddress))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty cell on PostalAddress Column Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            if (string.IsNullOrEmpty(item.TaxIDorVATID))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty cell on Tax Vat Column Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            if (string.IsNullOrEmpty(item.WorkPermitName))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty cell on Work permit  Column Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            else
                            {
                                item.HaveWorkPrintPermit = item.WorkPermitName.Trim().ToLower() == "Yes".Trim().ToLower() ? true : false;
                            }
                            if (string.IsNullOrEmpty(item.ParticularsName))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty cell on Particulars Column Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            else
                            {
                                item.Particulars = item.ParticularsName.Trim().ToLower() == "Corporate".ToLower().Trim() ? 2 : 1;
                            }
                            if (string.IsNullOrEmpty(item.CountryName))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty cell on Country Column Detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            else
                            {
                                var country = _country.commonLookups.FirstOrDefault(w => w.LookupName.Trim().ToLower() == item.CountryName.Trim().ToLower());
                                if (country == null)
                                {
                                    apiResponse.Status.Message.FriendlyMessage = $"Undentified Country name Detected on line {item.ExcelLineNumber}";
                                    return(apiResponse);
                                }
                                item.CountryId = country.LookupId;
                            }
                            if (itemFrmRepo != null)
                            {
                                itemFrmRepo.Address             = item.Address;
                                itemFrmRepo.SupplierTypeId      = item.SupplierTypeId;
                                itemFrmRepo.Name                = item.Name;
                                itemFrmRepo.Email               = item.Email;
                                itemFrmRepo.PhoneNo             = item.PhoneNo;
                                itemFrmRepo.RegistrationNo      = item.RegistrationNo;
                                itemFrmRepo.CountryId           = itemFrmRepo.CountryId;
                                itemFrmRepo.UpdatedOn           = DateTime.Now;
                                itemFrmRepo.Website             = item.Website;
                                itemFrmRepo.PostalAddress       = item.PostalAddress;
                                itemFrmRepo.TaxIDorVATID        = item.TaxIDorVATID;
                                itemFrmRepo.SupplierNumber      = itemFrmRepo.SupplierNumber;
                                itemFrmRepo.SupplierId          = itemFrmRepo.SupplierId;
                                itemFrmRepo.HaveWorkPrintPermit = item.HaveWorkPrintPermit;
                                itemFrmRepo.Active              = true;
                                itemFrmRepo.ApprovalStatusId    = item.ApprovalStatusId;
                                await _repo.UpdateSupplierAsync(itemFrmRepo);
                            }
                            else
                            {
                                var newItem = new cor_supplier
                                {
                                    Name                = item.Name,
                                    Address             = item.Address,
                                    PhoneNo             = item.PhoneNo,
                                    Email               = item.Email,
                                    RegistrationNo      = item.RegistrationNo,
                                    SupplierTypeId      = item.SupplierTypeId,
                                    Passport            = item.Passport,
                                    CountryId           = item.CountryId,
                                    ApprovalStatusId    = (int)ApprovalStatus.Pending,
                                    Active              = true,
                                    Deleted             = false,
                                    CreatedBy           = item.CreatedBy,
                                    CreatedOn           = DateTime.Now,
                                    UpdatedBy           = item.CreatedBy,
                                    UpdatedOn           = DateTime.Now,
                                    Website             = item.Website,
                                    PostalAddress       = item.PostalAddress,
                                    TaxIDorVATID        = item.TaxIDorVATID,
                                    SupplierNumber      = item.SupplierNumber,
                                    HaveWorkPrintPermit = item.HaveWorkPrintPermit,
                                    Particulars         = item.Particulars,
                                };
                                await _repo.AddNewSupplierAsync(newItem);
                            }
                        }
                    }
                    apiResponse.Status.IsSuccessful            = true;
                    apiResponse.Status.Message.FriendlyMessage = "Successful";
                    return(apiResponse);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
示例#2
0
        public async Task <SupplierRegRespObj> Handle(UpdateSupplierCommand request, CancellationToken cancellationToken)
        {
            var apiResponse = new SupplierRegRespObj {
                Status = new APIResponseStatus {
                    IsSuccessful = false, Message = new APIResponseMessage()
                }
            };

            try
            {
                ApplicationUser supplierUserAccount = new ApplicationUser();
                var             user = await _serverRequest.UserDataAsync();

                if (user.StaffId < 1)
                {
                    supplierUserAccount = await _userManager?.FindByEmailAsync(request.Email.Trim());
                }
                cor_supplier supp = new cor_supplier();
                if (user.StaffId < 1)
                {
                    if (request.SupplierId > 0)
                    {
                        supp = await BuildExistingSupplierObj(request);

                        await _supplierRepo.UpdateSupplierAsync(supp);

                        await CreateUpdteSuppliersUser(supp);
                    }
                    else
                    {
                        supp = BuildNewSupplierObj(request);
                        await _supplierRepo.AddNewSupplierAsync(supp);
                    }
                    apiResponse.SupplierId                     = supp.SupplierId;
                    apiResponse.Status.IsSuccessful            = true;
                    apiResponse.Status.Message.FriendlyMessage = "Successful";
                    return(apiResponse);
                }

                using (var transaction = await _dataContext.Database.BeginTransactionAsync())
                {
                    try
                    {
                        if (request.SupplierId > 0)
                        {
                            supp = await BuildExistingSupplierObj(request);

                            try
                            {
                                var id = await CreateUpdteSuppliersUser(supp);

                                supp.UserId = id;
                            }
                            catch (Exception ex)
                            {
                                await transaction.RollbackAsync();

                                apiResponse.Status.Message.FriendlyMessage = ex.Message;
                                return(apiResponse);
                            }
                            await _supplierRepo.UpdateSupplierAsync(supp);

                            await transaction.CommitAsync();

                            apiResponse.SupplierId                     = supp.SupplierId;
                            apiResponse.Status.IsSuccessful            = true;
                            apiResponse.Status.Message.FriendlyMessage = "Successful";
                            return(apiResponse);
                        }
                        else
                        {
                            if (supplierUserAccount.Email != null && request.SupplierId < 1)
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Supplier with this email {request.Email} already exist";
                                return(apiResponse);
                            }

                            var newSupplier = BuildNewSupplierObj(request);

                            var id = await CreateUpdteSuppliersUser(newSupplier);

                            newSupplier.UserId = id;
                            await _supplierRepo.AddNewSupplierAsync(newSupplier);

                            await transaction.CommitAsync();

                            apiResponse.SupplierId                     = newSupplier.SupplierId;
                            apiResponse.Status.IsSuccessful            = true;
                            apiResponse.Status.Message.FriendlyMessage = "Supplier Details Saved";
                            return(apiResponse);
                        }
                    }
                    catch (Exception ex)
                    {
                        await transaction.RollbackAsync();

                        apiResponse.Status.Message.FriendlyMessage = ex.Message;
                        return(apiResponse);
                    }
                }
            }
            catch (Exception ex)
            {
                #region Log error to file
                var errorCode = ErrorID.Generate(4);
                _logger.Error($"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}");
                return(new SupplierRegRespObj
                {
                    Status = new APIResponseStatus
                    {
                        Message = new APIResponseMessage
                        {
                            FriendlyMessage = "Error occured!! Please try again later",
                            MessageId = errorCode,
                            TechnicalMessage = $"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}"
                        }
                    }
                });

                #endregion
            }
        }