コード例 #1
0
 function add()
 {
     if ($this->request->isAsyncCall() || $this->request->isMobileDevice() || $this->request->isApiCall() && $this->request->isSubmitted()) {
         if (Milestones::canAdd($this->logged_user, $this->active_project)) {
             $milestone_data = $this->request->post('milestone');
             $this->smarty->assign('milestone_data', $milestone_data);
             if ($this->request->isSubmitted()) {
                 try {
                     DB::beginWork('Creating milestone @ ' . __CLASS__);
                     $this->active_milestone = new RemediaMilestone();
                     $this->active_milestone->setAttributes($milestone_data);
                     $start_on = $this->active_milestone->getStartOn();
                     if ($start_on instanceof DateValue) {
                         if (Globalization::isWeekend($start_on) || Globalization::isDayOff($start_on)) {
                             throw new Error(lang('Start date needs to be set on working day'));
                         }
                         //if
                     }
                     //if
                     $due_on = $this->active_milestone->getDueOn();
                     if ($due_on instanceof DateValue) {
                         if (Globalization::isWeekend($due_on) || Globalization::isDayOff($due_on)) {
                             throw new Error(lang('Due date needs to be set on working day'));
                         }
                         //if
                     }
                     //if
                     $this->active_milestone->setProjectId($this->active_project->getId());
                     $this->active_milestone->setCreatedBy($this->logged_user);
                     $this->active_milestone->setState(STATE_VISIBLE);
                     $this->active_milestone->setVisibility(VISIBILITY_NORMAL);
                     $this->active_milestone->save();
                     /* INIZIO frosso hack */
                     if (AngieApplication::isModuleLoaded('tracking') && TrackingObjects::canAdd($this->logged_user, $this->active_project)) {
                         $estimate_value = isset($milestone_data['estimate_value']) && $milestone_data['estimate_value'] ? (double) $milestone_data['estimate_value'] : null;
                         $estimate_job_type = isset($milestone_data['estimate_job_type_id']) && $milestone_data['estimate_job_type_id'] ? JobTypes::findById($milestone_data['estimate_job_type_id']) : null;
                         $estimate_comment = isset($milestone_data['estimate_comment']) ? $milestone_data['estimate_comment'] : null;
                         if ($estimate_value > 0 && $estimate_job_type instanceof JobType) {
                             $this->active_milestone->tracking()->setEstimate($estimate_value, $estimate_job_type, $estimate_comment, $this->logged_user);
                         } else {
                             if ($this->active_milestone->tracking()->getEstimate() instanceof Estimate) {
                                 $this->active_milestone->tracking()->setEstimate($estimate_value, $estimate_job_type, $estimate_comment, $this->logged_user);
                             }
                             // if
                         }
                         // if
                     }
                     // if
                     /* FINE frosso hack */
                     $this->active_milestone->subscriptions()->set(array_unique(array_merge((array) $this->logged_user->getId(), (array) $this->active_project->getLeaderId(), (array) array_var($milestone_data, 'subscribers', array()))), false);
                     DB::commit('Milestone created @ ' . __CLASS__);
                     $this->logged_user->notifier()->notifySubscribers($this->active_milestone, 'system/new_milestone');
                     if ($this->request->isPageCall()) {
                         $this->flash->success('Milestone ":name" has been created', array('name' => $this->active_milestone->getName()));
                         $this->response->redirectToUrl($this->active_milestone->getViewUrl());
                     } else {
                         $this->response->respondWithData($this->active_milestone, array('as' => 'milestone', 'detailed' => true));
                     }
                     // if
                 } catch (Exception $e) {
                     DB::rollback('Failed to create milestone @ ' . __CLASS__);
                     if ($this->request->isPageCall()) {
                         $this->smarty->assign('errors', $e);
                     } else {
                         $this->response->exception($e);
                     }
                     // if
                 }
                 // try
             }
             // if
         } else {
             $this->response->forbidden();
         }
         // if
     } else {
         $this->response->badRequest();
     }
     // if
 }
コード例 #2
0
 /**
  * Prende le stime dei figli, le somma e ne genera una singola
  */
 function getEstimateFromChilds()
 {
     // Prendo tutti i figli della milestone corrente
     $tasks = Tasks::findByMilestone($this->object, STATE_VISIBLE);
     // Scorro tutti i figli e ne salvo le stime
     $estimates = array();
     $estimates_sum = 0;
     if (is_foreachable($tasks)) {
         foreach ($tasks as $task) {
             $estimate = Estimates::findLatestByParent($task);
             // Se non è stata impostata la stima ritorna nullo, quindi bisogna controllare che effettivamente l'oggetto esista
             if ($estimate && $estimate instanceof Estimate) {
                 $estimates[] = $estimate;
                 $estimates_sum += $estimate->getValue();
             }
         }
     }
     // FIXME: seconda parte dell'if inutile
     if ($this->object instanceof Milestone || $this->object instanceof RemediaMilestone) {
         $estimate = new Estimate();
         $estimate->setParent($this->object);
         $estimate->setValue($estimates_sum);
         $estimate->setJobType(JobTypes::findById(1));
         // TODO: ho preso un job a caso, chissene
         $estimate->setComment('Stima generata automaticamente');
         $estimate->setCreatedBy($this->object->assignees()->getAssignee());
         // Assegno come creatore un tizio tra gli assegnatari
         $estimate->setCreatedOn(DateTimeValue::now());
     }
     return $estimate;
 }