@@ -19,52 +19,64 @@ public function __construct($date = null)
1919
2020 protected function getShiftWithTasks ()
2121 {
22- // $startOfMonth = max($this->date->copy()->startOfMonth(), Carbon::tomorrow());
2322 $ startOfMonth = $ this ->date ->copy ()->startOfMonth ();
2423 $ endOfMonth = $ this ->date ->copy ()->endOfMonth ();
2524
26- return Shift::query ()
25+ $ results = collect ();
26+
27+ Shift::query ()
2728 ->with (['task ' => fn ($ q ) => $ q ->withTrashed ()])
2829 ->whereNull ('soldier_id ' )
2930 ->whereBetween ('start_date ' , [$ startOfMonth , $ endOfMonth ])
3031 ->whereHas ('task ' , function ($ query ) {
3132 $ query ->withTrashed ()
3233 ->where ('kind ' , '!= ' , TaskKind::INPARALLEL ->value );
3334 })
34- ->lazy ()
35- ->map (fn (Shift $ shift ): ShiftService => Helpers::buildShift ($ shift ));
35+ ->chunk (300 , function ($ shifts ) use (&$ results ) {
36+ $ mapped = $ shifts ->map (fn (Shift $ shift ): ShiftService => Helpers::buildShift ($ shift ));
37+ $ results = $ results ->merge ($ mapped );
38+ });
39+
40+ return $ results ;
3641 }
3742
3843 protected function getSoldiersDetails ()
3944 {
40- $ range = new Range ($ this ->date ->copy ()->startOfMonth (), $ this ->date ->copy ()->endOfMonth ());
45+ $ range = new Range (
46+ $ this ->date ->copy ()->startOfMonth (),
47+ $ this ->date ->copy ()->endOfMonth ()
48+ );
49+
50+ $ results = collect ();
4151
42- return Soldier::where ('is_reservist ' , false )
52+ Soldier::where ('is_reservist ' , false )
4353 ->with ([
44- 'constraints ' => fn ($ q ) => $ q ->whereBetween ('start_date ' , [$ range ->start , $ range ->end ]),
45- 'shifts ' => fn ($ q ) => $ q ->whereBetween ('start_date ' , [$ range ->start , $ range ->end ])
54+ 'constraints ' => fn ($ q ) => $ q ->whereBetween ('start_date ' , [$ range ->start , $ range ->end ]),
55+ 'shifts ' => fn ($ q ) => $ q ->whereBetween ('start_date ' , [$ range ->start , $ range ->end ])
4656 ->whereHas ('task ' , function ($ query ) {
4757 $ query ->withTrashed ()->where ('kind ' , '!= ' , TaskKind::INPARALLEL ->value );
4858 }),
4959 ])
50- ->lazy ()
51- ->map (function (Soldier $ soldier ) {
52- $ constraints = Helpers::buildConstraints ($ soldier ->constraints );
60+ ->chunk (100 , function ($ soldiers ) use (&$ results ) {
61+ $ mapped = $ soldiers
62+ ->map (function (Soldier $ soldier ) {
63+ $ constraints = Helpers::buildConstraints ($ soldier ->constraints );
5364
54- $ shifts = Helpers::mapSoldierShifts ($ soldier ->shifts , false );
65+ $ shifts = Helpers::mapSoldierShifts ($ soldier ->shifts , false );
66+ $ shifts ->push (...Helpers::addShiftsSpaces ($ shifts ));
67+ $ shifts ->push (...Helpers::addPrevMonthSpaces ($ soldier ->id , now ()));
5568
56- $ shifts ->push (...Helpers::addShiftsSpaces ($ shifts ));
57- $ shifts ->push (...Helpers::addPrevMonthSpaces ($ soldier ->id , $ this ->date ));
69+ $ capacityHold = Helpers::capacityHold ($ shifts , []);
5870
59- $ capacityHold = Helpers::capacityHold ($ shifts , []);
71+ return Helpers::buildSoldier ($ soldier , $ constraints , $ shifts , $ capacityHold );
72+ })
73+ ->filter (fn ($ soldier ) => $ soldier ->hasMaxes ());
6074
61- return Helpers::buildSoldier ($ soldier , $ constraints , $ shifts , $ capacityHold );
62- })
63- ->filter (fn ($ soldier ) => $ soldier ->hasMaxes ())
64- ->shuffle ();
65- }
75+ $ results = $ results ->merge ($ mapped );
76+ });
6677
67- public function run ()
78+ return $ results ->shuffle ();
79+ } public function run ()
6880 {
6981 $ shifts = $ this ->getShiftWithTasks ();
7082 $ soldiers = $ this ->getSoldiersDetails ();
0 commit comments