Ejemplo n.º 1
0
        public async Task <IActionResult> Edit(int id, [Bind("Id,Name,BriefDescription,AssignedEmployee,TaskComplete")] CleaningTask cleaningTask)
        {
            var thisUserName = User.Identity.Name;
            var thisEmployee = _context.Employees.FirstOrDefault(e => e.Email == thisUserName);

            if (id != cleaningTask.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    cleaningTask.AssignedEmployee = await _context.Employees.Where(e => e.Id == thisEmployee.Id).SingleOrDefaultAsync();

                    cleaningTask.EmployeeId = thisEmployee.Id;
                    _context.Update(cleaningTask);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!CleaningTaskExists(cleaningTask.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(cleaningTask));
        }
 /// <summary>
 /// Sends an update of a CleaningTask to the server , if there is a connection
 /// </summary>
 /// <param name="t"></param>
 internal void UpdateCleaningTask(CleaningTask t)
 {
     if (serverConnection)
     {
         List <CleaningTask> tL = new List <CleaningTask>();
         tL.Add(t);
         restMng.PutCleaningTaskAsync(tL);
     }
 }
Ejemplo n.º 3
0
        public async Task <IActionResult> Create([Bind("Id,Name,BriefDescription,AssignedEmployee,TaskComplete")] CleaningTask cleaningTask)
        {
            if (ModelState.IsValid)
            {
                int employee = cleaningTask.AssignedEmployee.Id;
                cleaningTask.AssignedEmployee = _context.Employees.Where(e => e.Id == employee).Single();
                _context.Add(cleaningTask);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(cleaningTask));
        }
        public CleaningAgentPlatform(IEnumerable <MasCleaningAgent> agents, CleaningTask task)
        {
            Agents    = new List <MasCleaningAgent>(agents);
            Directory = new Dictionary <Guid, MasCleaningAgent>();
            Task      = task;

            foreach (var cleaningAgent in Agents)
            {
                Directory.Add(cleaningAgent.Id, cleaningAgent);
                cleaningAgent.Platform = this;
            }

            DecideRoles();
        }
Ejemplo n.º 5
0
        public static IEnumerable <string> Announcement(CleaningTask cleaningTask, MasCleaningAgent manager, IEnumerable <MasCleaningAgent> contractors, FibaAcl language)
        {
            var tasks = cleaningTask.SubTasks;

            foreach (var contractor in contractors)
            {
                foreach (var task in tasks)
                {
                    language.Message(Performative.Cfp, manager.Id.ToString(), contractor.Id.ToString(), task);
                }
            }

            return(tasks);
        }
Ejemplo n.º 6
0
        public static void Awarding(List <string> messages, MasCleaningAgent manager, IEnumerable <MasCleaningAgent> contractors, CleaningTask task, FibaAcl language)
        {
            var agentsAssigned = new List <Tuple <MasCleaningAgent, Tuple <int, int> > >();
            var messagesToDict = messages.ConvertAll(FibaAcl.MessagesToDict);

            // Processing bids
            foreach (var colRange in task.SubDivide)
            {
                var firstCol      = colRange.Item1;
                var secondCol     = colRange.Item2;
                var bidsFirstCol  = new List <KeyValuePair <MasCleaningAgent, List <Tuple <double, Tuple <int, int> > > > >();
                var bidsSecondCol = new List <KeyValuePair <MasCleaningAgent, List <Tuple <double, Tuple <int, int> > > > >();

                foreach (var contractor in contractors)
                {
                    // Skip agents that have already been assigned
                    if (agentsAssigned.Exists(tuple => tuple.Item1.Id == contractor.Id))
                    {
                        continue;
                    }

                    var c = contractor;
                    // Get messages from current contractor
                    var messagesFromContractor = messagesToDict.FindAll(m => m.ContainsKey("from") && m["from"] == c.Id.ToString());

                    var bids = FibaAcl.GetContent(messagesFromContractor);
                    // Bids to first column in the range column
                    var bidsContractorFirstCol = bids.FindAll(b => b.Item2.Item2 == firstCol);
                    // Bids to second column in the range column
                    var bidsContractorSecondCol = bids.FindAll(b => b.Item2.Item2 == secondCol);

                    if (bidsContractorFirstCol.Count > 0)
                    {
                        bidsFirstCol.Add(
                            new KeyValuePair <MasCleaningAgent, List <Tuple <double, Tuple <int, int> > > >(contractor,
                                                                                                            bidsContractorFirstCol));
                    }
                    if (bidsContractorSecondCol.Count > 0)
                    {
                        bidsSecondCol.Add(
                            new KeyValuePair <MasCleaningAgent, List <Tuple <double, Tuple <int, int> > > >(contractor,
                                                                                                            bidsContractorSecondCol));
                    }
                }

                // Decide
                bidsFirstCol.Sort(Comparison);
                bidsSecondCol.Sort(Comparison);

                var closestAgentFirst  = bidsFirstCol.FirstOrDefault();
                var closestAgentSecond = bidsSecondCol.FirstOrDefault();

                if (closestAgentFirst.Value != null)
                {
                    closestAgentFirst.Value.Sort(Comparison);
                }

                if (closestAgentSecond.Value != null)
                {
                    closestAgentSecond.Value.Sort(Comparison);
                }

                if (closestAgentFirst.Value != null && closestAgentSecond.Value != null)
                {
                    if (closestAgentFirst.Value.First().Item1 >= closestAgentSecond.Value.First().Item1)
                    {
                        agentsAssigned.Add(new Tuple <MasCleaningAgent, Tuple <int, int> >(closestAgentSecond.Key,
                                                                                           closestAgentSecond.Value.First().
                                                                                           Item2));
                    }
                    else
                    {
                        agentsAssigned.Add(new Tuple <MasCleaningAgent, Tuple <int, int> >(closestAgentFirst.Key,
                                                                                           closestAgentFirst.Value.First().
                                                                                           Item2));
                    }
                }
                else if (closestAgentFirst.Value == null)
                {
                    agentsAssigned.Add(new Tuple <MasCleaningAgent, Tuple <int, int> >(closestAgentSecond.Key,
                                                                                       closestAgentSecond.Value.First().
                                                                                       Item2));
                }
                else
                {
                    agentsAssigned.Add(new Tuple <MasCleaningAgent, Tuple <int, int> >(closestAgentFirst.Key,
                                                                                       closestAgentFirst.Value.First().
                                                                                       Item2));
                }
            }

            foreach (var assignment in agentsAssigned)
            {
                language.Message(Performative.Inform, manager.Id.ToString(),
                                 assignment.Item1.Id.ToString(), "clean(" + assignment.Item2.Item1 + "," + assignment.Item2.Item2 + ")");
            }
        }