Blame view

app/Console/Commands/BillReminder.php 2.12 KB
b7c7a5f6   Alexey Boroda   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
  <?php
  
  namespace App\Console\Commands;
  
  use App\Models\Common\Company;
  use App\Models\Expense\Bill;
  use App\Notifications\Expense\Bill as Notification;
  use App\Utilities\Overrider;
  use Date;
  use Illuminate\Console\Command;
  
  class BillReminder extends Command
  {
      /**
       * The name and signature of the console command.
       *
       * @var string
       */
      protected $signature = 'reminder:bill';
  
      /**
       * The console command description.
       *
       * @var string
       */
      protected $description = 'Send reminders for bills';
      
      /**
       * Create a new command instance.
       */
      public function __construct()
      {
          parent::__construct();
      }
  
      /**
       * Execute the console command.
       *
       * @return mixed
       */
      public function handle()
      {
          // Get all companies
          $companies = Company::all();
  
          foreach ($companies as $company) {
              // Set company id
              session(['company_id' => $company->id]);
  
              // Override settings and currencies
              Overrider::load('settings');
              Overrider::load('currencies');
  
              $company->setSettings();
  
              // Don't send reminders if disabled
              if (!$company->send_bill_reminder) {
                  continue;
              }
  
              $days = explode(',', $company->schedule_bill_days);
  
              foreach ($days as $day) {
                  $day = (int) trim($day);
  
                  $this->remind($day, $company);
              }
          }
  
          // Unset company_id
          session()->forget('company_id');
      }
  
      protected function remind($day, $company)
      {
          // Get due date
          $date = Date::today()->addDays($day)->toDateString();
  
          // Get upcoming bills
          $bills = Bill::with('vendor')->accrued()->notPaid()->due($date)->get();
  
          foreach ($bills as $bill) {
              // Notify all users assigned to this company
              foreach ($company->users as $user) {
                  if (!$user->can('read-notifications')) {
                      continue;
                  }
  
                  $user->notify(new Notification($bill));
              }
          }
      }
  }