public ResponseDto Register(NewCustomerDto newAccountDto)
        {
            try
            {
                var customer = new Customer(
                    newAccountDto.CustomerId,
                    newAccountDto.firstName,
                    newAccountDto.lastName,
                    newAccountDto.identityDocument,
                    true,
                    DateTime.UtcNow
                    );

                var nhibernateSession = _sessionFactory.OpenSession();
                nhibernateSession.Save(customer);
                nhibernateSession.Flush();
                return(new ResponseDto
                {
                    HttpStatusCode = StatusCodes.Status201Created,
                    Response = new ApiStringResponse("Customer Created")
                });
            }
            catch (Exception ex)
            {
                //TODO: Log exception async, for now write exception in the console
                Console.WriteLine(ex.Message);
                return(new ResponseDto
                {
                    HttpStatusCode = StatusCodes.Status500InternalServerError,
                    Response = new ApiStringResponse("Server Internal Error")
                });
            }
        }
        public IActionResult Post([FromBody] NewCustomerDto newCustomerDto)
        {
            newCustomerDto.CustomerId = Guid.NewGuid().ToString();
            ResponseDto response = _customerApplicationService.Register(newCustomerDto);

            return(StatusCode(response.HttpStatusCode, response.Response));
        }
Ejemplo n.º 3
0
        public ActionResult <CustomerViewModel> AddNewCustomer([FromBody] NewCustomerDto data)
        {
            try {
                if (data == null)
                {
                    return(StatusCode(400));
                }

                if (!ModelState.IsValid)
                {
                    return(new InvalidInputResponse(ModelState));
                }
                var customer = _command.Create(data);

                if (customer != null)
                {
                    return(StatusCode(201, customer));
                }
                else
                {
                    return(StatusCode(500, "Something Went Wrong please try again later"));
                }
            } catch (DuplicateTinNumberException tinDuplicate) {
                ModelState.AddModelError("TIN No", tinDuplicate.Message);
                return(new InvalidInputResponse(ModelState));
            } catch (DuplicatePhonenumberException phoneDuplicate) {
                ModelState.AddModelError("Telephone", phoneDuplicate.Message);
                return(new InvalidInputResponse(ModelState));
            } catch (Exception e) {
                _logger.LogError(500, e.StackTrace, e.Message);
                return(StatusCode(500, e.Message));
            }
        }
        public async Task <IActionResult> Post([FromBody] NewCustomerDto data, [FromServices] ICreateCustomerService service)
        {
            var result = await service.Create(data);

            if (result.IsSucccess())
            {
                return(CreatedAtAction(nameof(Get), result.Model.CustomerId, result.Model));
            }
            return(BadRequest(result.Errors));
        }
        public Customer CustomerForCreation(NewCustomerDto customer)
        {
            if (!_customerQuery.IsTinUnique(customer.tin.Trim()))
            {
                throw new DuplicateTinNumberException(customer.tin.Trim());
            }

            Customer newCustomer = new Customer()
            {
                FullName      = customer.FullName,
                Tin           = customer.tin,
                Email         = customer.email,
                Type          = customer.type,
                CreditLimit   = customer.creditLimit,
                PaymentPeriod = customer.paymentPeriod
            };

            foreach (var item in customer.addresses)
            {
                newCustomer.Address.Add(new Address()
                {
                    Country     = item.Country,
                    City        = item.City,
                    SubCity     = item.SubCity,
                    Location    = item.Location,
                    PhoneNumber = item.PhoneNumber
                });
            }

            foreach (var item in customer.telephones)
            {
                if (!_customerQuery.IsPhoneUnique(item.number.Trim()))
                {
                    throw new DuplicatePhonenumberException(item.number);
                }

                newCustomer.PhoneNumber.Add(new PhoneNumber()
                {
                    Number = item.number,
                    Type   = item.type
                });
            }

            foreach (var item in customer.socialMedias)
            {
                newCustomer.SocialMedia.Add(new SocialMedia()
                {
                    Site    = item.site,
                    Address = item.address
                });
            }

            return(newCustomer);
        }
Ejemplo n.º 6
0
        public async Task <ActionResult> CreateCustomerAsync([FromBody] NewCustomerDto newCustomer)
        {
            var newCustomerCommand = new CreateCustomerCommand(
                newCustomer.Name,
                newCustomer.Email,
                newCustomer.Address,
                newCustomer.Phone,
                newCustomer.Age);
            var customer = await mediator.Send(newCustomerCommand);

            return(Ok(customer));
        }
Ejemplo n.º 7
0
        public CustomerViewModel Create(NewCustomerDto newCustomer)
        {
            try {
                var customer = _factory.CustomerForCreation(newCustomer);
                _database.Customer.Add(customer);
                _database.Save();
                return(_factory.CustomerForView(customer));
            } catch (Exception e) {
                _logger.LogError(1, e.Message, e);

                return(null);
            }
        }
        public async Task <ServiceResult <CustomerDto> > Create(NewCustomerDto data)
        {
            try
            {
                var newCustomer     = _mapper.Map <NewCustomer>(data);
                var createdCustomer = await _repo.CreateCustomer(newCustomer);

                return(ServiceResult <CustomerDto> .Success(_mapper.Map <CustomerDto>(createdCustomer)));
            }
            catch (ArgumentException e)
            {
                return(ServiceResult <CustomerDto> .Error("ERR_VALIDATION", e.Message));
            }
        }
Ejemplo n.º 9
0
        public IHttpActionResult NewCustomer(NewCustomerDto newCustomerDto)
        {
            Account newCustomer = new Account()
            {
                Name        = newCustomerDto.Name,
                PhoneNumber = newCustomerDto.PhoneNumber,
                Balance     = newCustomerDto.Balance,
                Pin         = "0000"
            };

            newCustomer.AccountNumber = 1000000000;
            _context.Accounts.Add(newCustomer);
            _context.SaveChanges();
            return(Ok());
        }
Ejemplo n.º 10
0
        public ActionResult <CustomerDto> Create([FromBody] NewCustomerDto data)
        {
            try
            {
                var customer    = _mapper.Map <NewCustomerDto, Customer>(data);
                var newCustomer = _service.CreateCustomer(customer);

                var result = _mapper.Map <Customer, CustomerDto>(newCustomer);
                return(CreatedAtAction(nameof(Get), new { id = newCustomer.Id }, result));
            }
            catch (ArgumentException)
            {
                return(BadRequest());
            }
        }
        public async Task RegisterCompanyWithOwner(NewCustomerDto customer)
        {
            using (var uow = UnitOfWorkProvider.Create())
            {
                try
                {
                    var company = new CompanyDto
                    {
                        Ico      = customer.Ico,
                        JoinDate = DateTime.Now,
                        Name     = customer.Name
                    };

                    var employee = new EmployeeCreateDto()
                    {
                        Email        = customer.Email,
                        FirstName    = customer.FirstName,
                        LastName     = customer.LastName,
                        PasswordHash = customer.Password,
                        Company      = company,
                        Role         = Role.Owner
                    };



                    // no need to create company as it is created in employee service by default
                    await _employeeService.RegisterCustomerAsync(employee);

                    await uow.Commit();

                    int companyId = (await _companyService.GetByIco(customer.Ico)).Id;
                    var payment   = new PaymentDto
                    {
                        Amount         = 300,
                        CompanyId      = companyId,
                        DueDate        = DateTime.Now.AddDays(30),
                        VariableNumber = "1212100" + companyId
                    };

                    _paymentService.Create(payment);
                    await uow.Commit();
                }
                catch (ArgumentException e)
                {
                    Console.WriteLine(e);
                }
            }
        }
Ejemplo n.º 12
0
        public async Task <IActionResult> Post([FromBody] NewCustomerDto customer)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var result = await _customerService.CreateAsync(customer);

            if (result is null)
            {
                return(BadRequest());
            }

            return(CreatedAtAction("Get", new { id = result.Id }, result));
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Creates a new customer
        /// </summary>
        /// <param name="newCustomer"></param>
        /// <returns></returns>
        public async Task <CustomerDto> CreateAsync(NewCustomerDto newCustomer)
        {
            var customerEntity = _mapper.Map <Customer>(newCustomer);

            customerEntity.Id        = Guid.NewGuid();
            customerEntity.CreatedAt = DateTime.UtcNow;

            _ctx.Customers.Add(customerEntity);

            if (await _ctx.SaveChangesAsync() == 1)
            {
                return(_mapper.Map <CustomerDto>(customerEntity));
            }

            return(null);
        }
Ejemplo n.º 14
0
        public async Task <ActionResult <CustomerDto> > AddCustomer([FromBody] NewCustomerDto newCustomer)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new ResponseDto <string>()
                {
                    message = ErrorMessage.InvalidModel
                }));
            }

            CustomerDto customer;
            ResponseDto <CustomerDto> response = new ResponseDto <CustomerDto>()
            {
                statusCode = "201",
                message    = "successfully created new customer"
            };

            try
            {
                if (HttpContext.IsInRole(RoleNames.LaundryEmployee) || HttpContext.IsInRole(RoleNames.LaundryOwner))
                {
                    customer = await customerRepository.AddCustomer(newCustomer, HttpContext.User.Identity.Name, HttpContext.GetUserRole());

                    response.data = customer;
                    return(CreatedAtAction(nameof(GetCustomer), new { id = customer.Id }, response));
                }

                return(Unauthorized());
            }
            catch (Exception e)
            {
                response.statusCode = "400";
                if (e.Message == ErrorMessage.InvalidToken)
                {
                    response.message = ErrorMessage.InvalidToken;
                    return(BadRequest(response));
                }
                else if (e.Message == ErrorMessage.UsernameAlreadyExist)
                {
                    response.message = ErrorMessage.UsernameAlreadyExist;
                    return(BadRequest(response));
                }

                response.statusCode = "500";
                return(StatusCode(500, response));
            }
        }
        public IActionResult AddNewCustomer([FromBody] NewCustomerDto newCustomerDto)
        {
            var result = _customerService.AddCustomer(
                newCustomerDto.Name,
                newCustomerDto.Email,
                newCustomerDto.Address,
                newCustomerDto.City,
                newCustomerDto.Phone,
                LoggedInUserId
                );

            if (!result.IsFaulted)
            {
                return(Ok(result.Payload));
            }
            else
            {
                return(BadRequest(result.ErrorMessage));
            }
        }
Ejemplo n.º 16
0
        public async Task <ServiceResult <CustomerDto> > Create(NewCustomerDto data)
        {
            try
            {
                var newCustomer     = _mapper.Map <NewCustomer>(data);
                var createdCustomer = await _repo.CreateCustomer(newCustomer);

                await _publisher.Publish <CustomerCreatedEvent>(new
                {
                    CustomerId = createdCustomer.CustomerId.Id,
                    Name       = createdCustomer.Name,
                    BirthDate  = createdCustomer.BirthDate,
                    Type       = createdCustomer.Type.ToString(),
                    CreatedAt  = createdCustomer.CreatedAt
                });

                return(ServiceResult <CustomerDto> .Success(_mapper.Map <CustomerDto>(createdCustomer)));
            }
            catch (ArgumentException e)
            {
                return(ServiceResult <CustomerDto> .Error("ERR_VALIDATION", e.Message));
            }
        }
Ejemplo n.º 17
0
        public async Task <ActionResult> Register(NewCustomerDto customer)
        {
            var isIcoAlreadyRegistered   = (await CompanyFacade.GetAsyncByIco(customer.Ico)) != null;
            var isEmailAlreadyRegistered = (await EmployeeFacade.GetAsyncByEmail(customer.Email)) != null;

            if (isIcoAlreadyRegistered)
            {
                ModelState.AddModelError("Ico", "Ico is already registered");
                return(View());
            }

            if (isEmailAlreadyRegistered)
            {
                ModelState.AddModelError("Email", "Account with that email already exists!");
                return(View());
            }


            await CompanyFacade.RegisterCompanyWithOwner(customer);

            AddAuthTicket(customer.Email, Role.Owner.ToString());

            return(RedirectToAction("Index", "Home"));
        }
 public async Task <Guid> Create(NewCustomerDto newCustomer)
 {
     return(await Mediator.Send(new CreateCustomerCommand { NewCustomer = newCustomer }));
 }
Ejemplo n.º 19
0
        //private readonly LaundryApiContext _context;
        //private readonly IMapper mapper;
        //private readonly IRepositoryHelper repositoryHelper;
        //public CustomerRespository(LaundryApiContext _context, IMapper mapper,IRepositoryHelper repositoryHelper)
        //{
        //    this._context = _context;
        //    this.mapper = mapper;
        //    this.repositoryHelper = repositoryHelper;
        //}

        //public async Task<CustomerDto> AddCustomer(NewCustomerDto newCustomerDto, string username,string userRole)
        //{
        //    try
        //    {
        //        Employee employee=null;
        //        Laundry laundry=null;
        //        if (userRole == RoleNames.LaundryOwner)
        //            laundry = repositoryHelper.GetLaundryByUsername(username);
        //        else
        //            employee = repositoryHelper.GetEmployeeByUsername(username);

        //        var customerInDb = laundry == null
        //            ?  _context.Customers.SingleOrDefault(x => x.LaundryId
        //               == employee.LaundryId && x.Username == newCustomerDto.Username)
        //            : _context.Customers.SingleOrDefault(x => x.LaundryId
        //                == laundry.Id && x.Username == newCustomerDto.Username);
        //        if (customerInDb != null)
        //        {
        //            if (customerInDb.IsDeleted)
        //            {
        //                customerInDb.IsDeleted = false;
        //                customerInDb.Name = newCustomerDto.Name;
        //                customerInDb.PhoneNumber = newCustomerDto.PhoneNumber;
        //                customerInDb.Address = newCustomerDto.Address;
        //                await _context.SaveChangesAsync();
        //            }
        //            else
        //                throw new Exception(ErrorMessage.UsernameAlreadyExist);
        //        }
        //        else
        //            customerInDb= await AddCustomer(newCustomerDto, userRole, employee, laundry);

        //        var returnObj = mapper.Map<CustomerDto>(customerInDb);
        //        return returnObj;

        //    }
        //    catch(Exception e)
        //    {
        //        if (e.Message==ErrorMessage.UsernameAlreadyExist)
        //            throw new Exception(ErrorMessage.UsernameAlreadyExist);
        //        throw new Exception(ErrorMessage.FailedDbOperation);
        //    }

        //}

        //public async Task<bool> UpdateCustomer(CustomerDto customerDto)
        //{
        //    try
        //    {
        //        //get the customer
        //        Customer customerInDb =await _context.Customers.FindAsync(customerDto.Id);

        //        //validate that the customer exist
        //        if (customerInDb == null)
        //            throw new Exception(ErrorMessage.EntityDoesNotExist);

        //        //update the changes
        //        customerInDb.Address = customerDto.Address;
        //        customerInDb.Name = customerDto.Name;
        //        customerInDb.PhoneNumber = customerDto.PhoneNumber;
        //        customerInDb.UpdatedAt = DateTime.Now;
        //        customerInDb.Username = customerDto.Username;

        //        //save changes
        //        await  _context.SaveChangesAsync();

        //        return true;
        //    }
        //    catch(Exception e)
        //    {
        //        if (e.Message == ErrorMessage.EntityDoesNotExist)
        //            throw new Exception(ErrorMessage.EntityDoesNotExist);

        //        throw new Exception(ErrorMessage.FailedDbOperation);
        //    }

        //}

        //public async void UpdateTotalPurchase(Guid customerId, decimal amt)
        //{
        //    try
        //    {
        //        Customer customerInDb = await _context.Customers.FindAsync(customerId);
        //        if (customerInDb == null)
        //            throw new Exception(ErrorMessage.UserDoesNotExist);
        //        customerInDb.TotalPurchase = customerInDb.TotalPurchase + amt;
        //        await _context.SaveChangesAsync();
        //        return;
        //    }
        //    catch
        //    {
        //        throw new Exception(ErrorMessage.FailedDbOperation);
        //    }

        //}

        //public void DeleteCustomer(Guid customerId)
        //{
        //    try
        //    {
        //        Customer customerInDb = _context.Customers.Find( customerId);
        //        if (customerInDb == null)
        //            throw new Exception(ErrorMessage.EntityDoesNotExist);

        //        customerInDb.IsDeleted = true;
        //         _context.SaveChanges();
        //        return;
        //    }
        //    catch(Exception e)
        //    {
        //        if (e.Message == ErrorMessage.EntityDoesNotExist)
        //            throw new Exception(ErrorMessage.EntityDoesNotExist);

        //        throw new Exception(ErrorMessage.FailedDbOperation);
        //    }

        //}

        //public CustomerDto GetCustomer(Guid customerId)
        //{
        //    try
        //    {
        //        var customer = _context.Customers.SingleOrDefault(c => c.Id == customerId && c.IsDeleted==false);
        //        if (customer == null)
        //            throw new Exception(ErrorMessage.EntityDoesNotExist);

        //        var _customer = mapper.Map<CustomerDto>(customer);
        //        return _customer;
        //    }
        //    catch(Exception e)
        //    {
        //        if (e.Message == ErrorMessage.EntityDoesNotExist)
        //            throw new Exception(ErrorMessage.EntityDoesNotExist);

        //        throw new Exception(ErrorMessage.FailedDbOperation);
        //    }

        //}

        //public IEnumerable<CustomerDto> GetCustomer(string customerName, string username)
        //{
        //    IEnumerable<Customer> customers;
        //    if(string.IsNullOrWhiteSpace(username) && !string.IsNullOrWhiteSpace(customerName))
        //        customers= _context.Customers.Where(x => x.Name.Contains(customerName) && !x.IsDeleted);
        //    else if (string.IsNullOrWhiteSpace(customerName) && !string.IsNullOrWhiteSpace(username) )
        //        customers = _context.Customers.Where(x => x.Username.Contains(customerName) && !x.IsDeleted);
        //    else
        //        customers = _context.Customers.Where(x => x.Name.Contains(customerName) && x.Username.Contains(username) && !x.IsDeleted);

        //    if (customers.Count() == 0)//db search return nothing
        //        throw new Exception(ErrorMessage.NoEntityMatchesSearch);

        //    return mapper.Map<IEnumerable<CustomerDto>>(customers);
        //}

        //public IEnumerable<CustomerDto> GetCustomer(string laundryUsername)
        //{
        //    Laundry laundry=repositoryHelper.GetLaundryByUsername(laundryUsername);
        //    IEnumerable<Customer> debtors=_context.Customers.Where(x => x.LaundryId == laundry.Id && x.Debt > 0);
        //    if (debtors.Count() == 0)
        //        throw new Exception(ErrorMessage.NoEntityMatchesSearch);
        //    return mapper.Map<IEnumerable<CustomerDto>>(debtors);

        //}

        //public PagedList<CustomerDto> GetPage(int pageSize, string laundryUsername, int pageNumber = 1, string searchParam = "")
        //{
        //    var laundry = repositoryHelper.GetLaundryByUsername(laundryUsername);
        //    var customerList = _context.Customers.Where(x => x.IsDeleted == false && x.LaundryId == laundry.Id).ToList();
        //    if (searchParam != "")
        //    {
        //        customerList = customerList.Where(x => x.Name.Contains(searchParam.ToLower())).ToList();
        //        if(customerList.Count() / pageSize <= pageNumber)
        //            pageNumber=  1;
        //    }

        //    var page = customerList.Skip((pageNumber - 1) * pageSize).Take(pageSize);
        //    var maxPage = customerList.Count / (decimal)pageSize;
        //    PagedList<CustomerDto> obj = new PagedList<CustomerDto>()
        //    {
        //        Data = mapper.Map<IEnumerable<CustomerDto>>(page),
        //        PageIndex = pageNumber,
        //        PageSize = pageSize,
        //    };
        //    if (maxPage < 1)
        //        obj.MaxPageIndex = 1;
        //    else
        //    {
        //        int _num;
        //        try
        //        {_num = Convert.ToInt32(Convert.ToString(maxPage).Split(".")[1]);}
        //        catch
        //        { _num = 0;}

        //        obj.MaxPageIndex = _num > 0 ? Convert.ToInt32(maxPage + 1) - 1 : Convert.ToInt32(maxPage);
        //    }
        //    return obj;
        //}

        //private async Task<Customer> AddCustomer(NewCustomerDto newCustomerDto,string userRole,Employee employee, Laundry laundry)
        //{
        //    //map the customerdto to the customer obj and update missing properties
        //    Customer customer = mapper.Map<Customer>(newCustomerDto);
        //    customer.CreatedAt = DateTime.Now;
        //    customer.TotalPurchase = 0;
        //    customer.UpdatedAt = DateTime.Now;
        //    customer.Debt = 0;
        //    customer.Name = customer.Name.ToLower();

        //    //assign the customer a laundryId and/or employeeId
        //    if (userRole == RoleNames.LaundryEmployee && employee != null)
        //    {
        //        customer.EmployeeId = employee.Id;
        //        customer.LaundryId = employee.LaundryId;
        //        //updating employee object and laundry object
        //        _context.Laundries.Find(laundry.Id).NoOfCustomers += 1;
        //        _context.Employees.Find(employee.Id).NoOfCustomers += 1;
        //    }
        //    else
        //    {
        //        customer.LaundryId = laundry.Id;
        //        _context.Laundries.Find(laundry.Id).NoOfCustomers += 1;
        //    }

        //    await _context.Customers.AddAsync(customer);
        //    await _context.SaveChangesAsync();
        //    return customer;
        //}

        //public IEnumerable<CustomerDto> SearchForCustomer(string searchParam,string paramType)
        //{
        //    List<Customer> customer;
        //    if (paramType == "email")
        //        customer = _context.Customers.Where(x => x.Username.Contains(searchParam)).ToList();
        //    else if (paramType == "name")
        //        customer = _context.Customers.Where(x => x.Name.Contains( searchParam)).ToList();
        //    else
        //        customer = _context.Customers.Where(x => x.PhoneNumber.Contains(searchParam)).ToList();

        //    IEnumerable<CustomerDto> customers=mapper.Map<IEnumerable<CustomerDto>>(customer);
        //    return customers;

        //}
        public Task <CustomerDto> AddCustomer(NewCustomerDto newCustomer, string username, string userRole)
        {
            throw new NotImplementedException();
        }