示例#1
0
 public function test_remove_all_schedule_for_one_company()
 {
     $companyOne = factory(Company::class)->create();
     $companyTwo = factory(Company::class)->create();
     $scheduleOne = factory(Schedule::class)->create(['who_object' => Company::class, 'who_id' => $companyOne->id]);
     $scheduleTwo = factory(Schedule::class)->create(['who_object' => Company::class, 'who_id' => $companyTwo->id]);
     // check is saved correctly to DB
     $this->seeInDatabase('schedules', ['id' => $scheduleOne->id, 'who_object' => Company::class, 'who_id' => $companyOne->id]);
     $this->seeInDatabase('schedules', ['id' => $scheduleTwo->id, 'who_object' => Company::class, 'who_id' => $companyTwo->id]);
     // remove reminders for Company One
     $scheduleRepository = new ScheduleRepository();
     $scheduleRepository->removeAllForObject($companyOne);
     // check is one removed from DB
     $this->dontSeeInDatabase('schedules', ['id' => $scheduleOne->id, 'who_object' => Company::class, 'who_id' => $companyOne->id]);
     $this->seeInDatabase('schedules', ['id' => $scheduleTwo->id, 'who_object' => Company::class, 'who_id' => $companyTwo->id]);
 }
 /**
  * Update the specified resource in storage.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  \App\Company $company
  * @return \Illuminate\Http\Response
  */
 public function update(Request $request, Company $company)
 {
     $this->authorize('update-company', $company);
     $this->validate($request, ['name' => 'required|max:255', 'licence_expire_at' => 'date_format:Y-m-d']);
     $company->name = $request->name;
     if ($request->licence_expire_at != '') {
         $company->licence_expire_at = $request->licence_expire_at;
         $company->is_suspended = false;
     }
     $company->save();
     // update schedules for SendReminderEmail(s)
     if (isset($company->licence_expire_at)) {
         $lrc = new LicenceReminderCalculator();
         $scheduleRepository = new ScheduleRepository();
         $scheduleRepository->removeAllForObject($company);
         // send reminders emails on configured days before expiration date
         $reminders = $scheduleRepository->addSendReminderEmail($company, $lrc);
         // suspend company on expiration date
         $suspensions = $scheduleRepository->addSuspendCompany($company);
         // send suspension emails on expiration date
         $suspensionEmails = $scheduleRepository->addSendSuspensionEmail($company);
         // send approval email now
         $approvalEmail = new ActionCommandSendApprovalEmailCommand($company->id);
         $approvalEmail->execute();
     }
     return redirect('/companies');
 }