Exemplo n.º 1
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            _context.Attach(ApplicationUser).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!UserExists(ApplicationUser.Id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(RedirectToPage("./Index"));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            Contract = await _context.Contract.Include(m => m.Technician)
                       .FirstOrDefaultAsync(m => (m.ClientId == Contract.ClientId & m.TechnicianId == Contract.TechnicianId));

            // Para que el AverageRanking del tecnico quede actualizado, le mando un mensaje
            // al tecnico para que recalcule el ranking.
            // Si el controlador tuviera la responsabilidad de cambiar el AverageRanking,
            // se violaría el principio SRP.
            try
            {
                Contract.Technician.CalculateRanking(Feedback);
            }
            catch (Check.PreconditionException ex)
            {
                return(Redirect("https://localhost:5001/Exception/Exception?id=" + ex.Message));
            }

            if (Contract != null)
            {
                _context.Contract.Remove(Contract);
                _context.Feedbacks.Add(Feedback);
                await _context.SaveChangesAsync();
            }

            return(RedirectToPage("./Index"));
        }
Exemplo n.º 3
0
        public async Task <IActionResult> OnPostAsync()
        {
            Contract = await _context.Contract
                       .FirstOrDefaultAsync(m => (m.ClientId == Contract.ClientId & m.TechnicianId == Contract.TechnicianId));

            if (Contract != null)
            {
                _context.Contract.Remove(Contract);
                await _context.SaveChangesAsync();
            }

            return(RedirectToPage("./Index"));
        }
Exemplo n.º 4
0
        public async Task <IActionResult> OnPostAsync()
        {
            // Busco al Admin en la base de datos
            Admin = _context.Admin.FirstOrDefault(m => m.Role == IdentityData.AdminRoleName);

            // Aca busco si en la base de datos ya hay un contrato con el mismo técnico
            // Si lo hay se lanza la excepción.
            Contract contract = _context.Contract
                                .FirstOrDefault(m => m.TechnicianId == Contract.TechnicianId);

            try
            {
                Check.Precondition(contract == null, "El tecnico ya tiene un contrato");
            }
            catch (Check.PreconditionException ex)
            {
                return(Redirect("https://localhost:5001/Exception/Exception?id=" + ex.Message));
            }

            if (!ModelState.IsValid)
            {
                return(Page());
            }
            // Aqui agrego el contrato a la lista de contratos del cliente y el técnico
            Contract.Client = _context.Clients.Find(Contract.ClientId);

            Contract.Technician = _context.Technicians.Find(Contract.TechnicianId);

            Contract.Client.Contracts.Add(Contract);

            Contract.Technician.Contracts.Add(Contract);

            Contract.Technician.Available = false;

            // Como el técnico ya tiene un contrato lo quito de la lista de técnicos filtrada
            // para que si otro cliente quiere crear un contrato no encuentre al técnico
            Admin.ListaFiltradaTechnicians.Remove(Contract.Technician);


            // Aca aplicamos LSP porque la base de datos guarda instancias de Contract,
            // y en el IndexModel mostramos una lista de Contracts. Por lo tanto al sustituír
            // Contract por ContractByDay o ContractByHour no se encuentran efectos colaterales.
            _context.Contract.Add(Contract);
            await _context.SaveChangesAsync();

            return(RedirectToPage("./Index"));
        }
Exemplo n.º 5
0
        public async Task <IActionResult> OnPostAsync(string id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            ApplicationUser = await _context.Users.FindAsync(id);

            if (ApplicationUser != null)
            {
                _context.Users.Remove(ApplicationUser);
                await _context.SaveChangesAsync();
            }

            return(RedirectToPage("./Index"));
        }
Exemplo n.º 6
0
        public async Task <IActionResult> OnPostAsync(string id, string[] selectedRoles)
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            var technicianToUpdate = await _context.Technicians
                                     .Include(i => i.WorkersWithRole)
                                     .ThenInclude(i => i.RoleWorker)
                                     .FirstOrDefaultAsync(s => s.Id == id);

            if (await TryUpdateModelAsync <Technician>(
                    technicianToUpdate,
                    "Tecnico",
                    i => i.Name, i => i.WorkersWithRole))
            {
                UpdateInstructorCourses(_context, selectedRoles, technicianToUpdate);
                // Esta excepción esta porque consideramos que si el técnico tiene más de
                // 3 roles sería demasiado
                try
                {
                    Check.Postcondition(technicianToUpdate.WorkersWithRole.Count <= 3,
                                        "El tecnico no puede tener mas de 3 roles");
                }
                catch (Check.PostconditionException ex)
                {
                    return(Redirect("https://localhost:5001/Exception/Exception?id=" + ex.Message));
                }
                await _context.SaveChangesAsync();

                return(RedirectToPage("./Index"));
            }
            UpdateInstructorCourses(_context, selectedRoles, technicianToUpdate);
            PopulateAssignedCourseData(_context, technicianToUpdate);

            return(Page());
        }
        public async Task <IActionResult> OnPostAsync()
        {
            // Busco al Admin en la base de datos
            Admin = _context.Admin.FirstOrDefault(m => m.Role == IdentityData.AdminRoleName);

            // Aqui encuentro al cliente con el Username y le asigno el Id de dicho cliente al
            // contrato
            string ClientName = User.Identity.Name;

            Client client = _context.Clients.FirstOrDefault(m => m.Email == ClientName);

            try
            {
                Check.Precondition(client != null, "No se encontro el cliente");
            }
            catch (Check.PreconditionException ex)
            {
                return(Redirect("https://localhost:5001/Exception/Exception?id=" + ex.Message));
            }


            Contract.ClientId = client.Id;

            Contract contract = _context.Contract
                                .FirstOrDefault(m => m.TechnicianId == Contract.TechnicianId);

            // El tecnico no debería estar en más de un proyecto, asi que implementamos esta
            // excepción para que cuando se quiera crear un contrato con un tecnico, que se
            // verifique que dicho tecnico esté libre.
            try
            {
                Check.Precondition(contract == null, "El tecnico ya tiene un contrato");
            }
            catch (Check.PreconditionException ex)
            {
                return(Redirect("https://localhost:5001/Exception/Exception?id=" + ex.Message));
            }

            if (!ModelState.IsValid)
            {
                return(Page());
            }

            // Aqui agrego el contrato a la lista de contratos del cliente y el técnico
            Contract.Client = _context.Clients.Find(Contract.ClientId);

            Contract.Technician = _context.Technicians.Find(Contract.TechnicianId);

            Contract.Client.Contracts.Add(Contract);

            Contract.Technician.Contracts.Add(Contract);

            // Como el técnico ya tiene un contrato lo quito de la lista de técnicos filtrada
            // para que si otro cliente quiere crear un contrato no encuentre al técnico
            Contract.Technician.Available = false;
            Admin.ListaFiltradaTechnicians.Remove(Contract.Technician);

            // Aca aplicamos LSP porque la base de datos guarda instancias de Contract,
            // y en el IndexModel mostramos una lista de Contracts. Por lo tanto al sustituír
            // Contract por ContractByDay o ContractByHour no se encuentran efectos colaterales.
            _context.Contract.Add(Contract);
            await _context.SaveChangesAsync();

            return(RedirectToPage("./Index"));
        }