예제 #1
0
        public async Task <IHttpActionResult> TransferRoutes(int crewId, List <int> RouteIds)
        {
            try
            {
                var emp              = db.Employees.Single(x => x.CrewId == crewId);
                var donorRoutes      = db.Routes.Where(x => RouteIds.Contains(x.Id) && x.EmployeeId != emp.Id).OrderBy(x => x.Date).ThenBy(x => x.EmployeeId).ThenBy(x => x.EstNum);
                var servicDetailsIds = await donorRoutes.Select(x => x.ServiceDetailId).Distinct().ToListAsync();

                var serviceDetails = db.ServiceDetails.Where(x => servicDetailsIds.Contains(x.Id));
                var days           = donorRoutes.Select(x => x.Date).Distinct();

                foreach (var day in days)
                {
                    var lastRecipientRouteEstNum = db.Routes.Where(x => x.EmployeeId == emp.Id && x.Date == day).Max(x => x.EstNum);

                    foreach (var route in donorRoutes)
                    {
                        route.EmployeeId = emp.Id;
                        route.EstNum     = ++lastRecipientRouteEstNum;
                        route.EmpPerc    = emp.PayPerc;
                        route.EmpAmount  = emp.GetWeeklyAmount(route.WeeklyRate.Value, serviceDetails.Single(x => x.Id == route.ServiceDetailId));
                    }
                }

                await db.SaveChangesAsync();

                return(Ok(new { message = "Routes updated" }));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
예제 #2
0
        public async Task <IHttpActionResult> DeleteNote(long id)
        {
            Note note = await db.Notes.FindAsync(id);

            if (note == null)
            {
                return(NotFound());
            }

            db.Notes.Remove(note);
            await db.SaveChangesAsync();

            return(Ok(note));
        }
예제 #3
0
        public async Task <IHttpActionResult> DeleteAddress(long id)
        {
            Address address = await db.Addresses.FindAsync(id);

            if (address == null)
            {
                return(NotFound());
            }

            db.Addresses.Remove(address);
            await db.SaveChangesAsync();

            return(Ok(address));
        }
예제 #4
0
        public async Task <IHttpActionResult> DeleteNote(long id)
        {
            EmailAddress emailAddress = await db.EmailAddresses.FindAsync(id);

            if (emailAddress == null)
            {
                return(NotFound());
            }

            if (!(await db.EmailAddresses.AnyAsync(x => x.Id != id && x.CustomerId == emailAddress.CustomerId)))
            {
                return(BadRequest("Must have at least one email address"));
            }

            db.EmailAddresses.Remove(emailAddress);
            await db.SaveChangesAsync();

            return(Ok(emailAddress));
        }
예제 #5
0
        public async Task <IHttpActionResult> DeletePhone(long id)
        {
            Phone phone = await db.Phones.FindAsync(id);

            if (phone == null)
            {
                return(NotFound());
            }

            if (!(await db.Phones.AnyAsync(x => x.Id != id && x.CustomerId == phone.CustomerId)))
            {
                return(BadRequest("Must have at least one phone number."));
            }

            db.Phones.Remove(phone);
            await db.SaveChangesAsync();

            return(Ok(phone));
        }
예제 #6
0
        public async Task <IHttpActionResult> MarkCompleted(MobileRouteStopViewModel stop)
        {
            try
            {
                int employeeId = ApplicationUserManager.GetCurrentUserEmployeeId();
                var routes     = db.Routes.Where(x => x.EmployeeId == employeeId && x.Date == stop.Date && x.CustomerID == stop.CustomerId);
                foreach (var route in routes)
                {
                    if (!stop.Details.Any(x => x.ServiceDetailId == route.ServiceDetailId))
                    {
                        return(BadRequest("Not all services completed.  Try reloading page."));
                    }
                }

                foreach (var route in routes)
                {
                    route.LastServiceDate = route.LastServiceDate ?? DateTime.Today;
                }

                string problems = string.Join(", ", stop.Conditions.Where(x => x.Selected && x.Problem != "").Select(x => x.Problem).ToList());
                if (problems != "")
                {
                    db.ServiceHistories.Add(new ServiceHistory
                    {
                        CustomerId  = stop.CustomerId,
                        ServiceDate = DateTime.Now,
                        EmployeeId  = employeeId,
                        Complaint   = false,
                        Description = problems
                    });
                }


                await db.SaveChangesAsync();

                return(Ok());
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
예제 #7
0
        public async Task <HttpResponseMessage> Update(int id, [FromBody] Customer customer)
        {
            bool   isNew      = customer.Id == 0;
            string validation = null;
            var    props      = customer.GetType().GetProperties(BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Instance).ToList();

            if (!ModelState.IsValid)
            {
                var errors = new List <string>();
                foreach (var value in ModelState.Values)
                {
                    foreach (var error in value.Errors)
                    {
                        errors.Add(error.ErrorMessage);
                    }
                }
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Join(" | ", errors)));
            }
            else
            {
                validation = customer.Validate();
            }

            if (validation != null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, validation));
            }

            var resp = Request.CreateResponse(isNew ? HttpStatusCode.Created : HttpStatusCode.NoContent, new GenericCreateResponse());

            try
            {
                DeleteUnfinishedChildren(customer);
                if (isNew)
                {
                    db.Customers.Add(customer);
                }
                else
                {
                    StampCustIdOnChildObjects(customer);
                    db.Entry(customer).State = EntityState.Modified;
                    customer.SaveChildObjects(db);
                }

                await db.SaveChangesAsync();

                if (isNew)
                {
                    resp.Headers.Location = new Uri($"{Request.RequestUri.Scheme}://{Request.RequestUri.Authority}/Customers/edit?id={customer.Id}");
                }
            }

            catch (DbEntityValidationException ve)
            {
                var errorList = new List <string>();
                foreach (var e in ve.EntityValidationErrors)
                {
                    errorList.Add($"props:{string.Join(",", e.ValidationErrors.Select(x => x.PropertyName).ToArray())} | errors:{string.Join(",", e.ValidationErrors.Select(x => x.ErrorMessage).ToArray())} ");
                }
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Join("<br />", errorList)));
            }

            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message));
            }

            return(resp);
        }
        public async Task <HttpResponseMessage> CreateOrUpdate(int customerId, List <ServiceDay> serviceDays)
        {
            var validationMessage = ValidateServiceDays(customerId, serviceDays);

            if (validationMessage != "")
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, validationMessage));
            }

            try
            {
                var newServiceDays      = serviceDays.Where(x => x.Id == 0);
                var updatedServiceDays  = serviceDays.Where(x => x.Id != 0);
                var updatedIds          = updatedServiceDays.Select(x => x.Id);
                var serviceDaysToDelete = db.ServiceDays.Where(x => x.CustomerId == customerId && !updatedIds.Contains(x.Id));

                if (serviceDaysToDelete.Count() > 0)
                {
                    db.ServiceDays.RemoveRange(serviceDaysToDelete);
                }

                foreach (var newDay in newServiceDays)
                {
                    db.ServiceDays.Add(newDay);
                }

                foreach (var update in updatedServiceDays)
                {
                    db.Entry(update).State = EntityState.Modified;
                    foreach (var sd in update.ServiceDetails)
                    {
                        if (sd.Id == 0)
                        {
                            db.ServiceDetails.Add(sd);
                        }
                        else
                        {
                            db.Entry(sd).State = EntityState.Modified;
                        }
                    }
                }


                await db.SaveChangesAsync();

                //{
                //    var entry = db.Entry(update);
                //    if (entry.State == EntityState.Detached || entry.State == EntityState.Modified)
                //    {
                //        entry.State = EntityState.Modified;
                //        db.Set<ServiceDay>().Attach(update);
                //    }
                //}

                //await db.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message));
            }

            var resp = Request.CreateResponse(HttpStatusCode.NoContent); //, new GenericCreateResponse());

            resp.Headers.Location = new Uri($"{Request.RequestUri.Scheme}://{Request.RequestUri.Authority}/ServiceDetails/Edit?id={customerId}");

            return(resp);
        }
예제 #9
0
        public async Task <HttpResponseMessage> Update(int id, [FromBody] Employee emp)
        {
            bool isNew = emp.Id == 0;

            string validation = null;
            var    props      = emp.GetType().GetProperties(BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Instance).ToList();

            if (!ModelState.IsValid)
            {
                var errors = new List <string>();
                foreach (var value in ModelState.Values)
                {
                    foreach (var error in value.Errors)
                    {
                        errors.Add(error.ErrorMessage);
                    }
                }
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, string.Join(" | ", errors)));
            }

            var appUser = await ApplicationUserManager.GetApplicationUserAsync(id);

            if (emp.User != null)
            {
                if (appUser == null)
                {
                    var manager = ApplicationUserManager.GetCurrent();
                    appUser = new ApplicationUser {
                        UserName = emp.User.UserName, Email = emp.User.Email, EmployeeId = emp.Id
                    };

                    var result = await manager.CreateAsync(appUser, "qwerASDF1234!@#$asdf");

                    //var result = await manager.CreateAsync(appUser, "qwerASDF1234!@#$asdf");
                    if (result.Succeeded)
                    {
                        //appUser = await ApplicationUserManager.GetApplicationUserAsync(id);
                        await appUser.SendEmailConfirmation(manager);
                    }
                    else
                    {
                        return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, $"Error creating Application User {emp.User.UserName}.  Error = {string.Join("|", result.Errors)}"));
                    }
                }
            }


            if (validation != null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, validation));
            }

            try
            {
                if (isNew)
                {
                    db.Employees.Add(emp);
                }
                else
                {
                    db.Entry(emp).State = EntityState.Modified;
                }

                await db.SaveChangesAsync();
            }

            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message));
            }

            var resp = Request.CreateResponse(isNew ? HttpStatusCode.Created : HttpStatusCode.NoContent, new GenericCreateResponse());

            return(resp);
        }