use yii_app\records\ProductsClass;
use yii_app\records\Sales;
use yii_app\records\SalesProducts;
+use yii_app\records\TimetableFactModel;
use yii_app\records\TimetableV3;
class IncomeService
* @throws Exception
*/
public function show($data) {
- // берём планы по флористу в указанном промежутке времени
- $plans = Timetable::find()->with(['checkIns'])->where(['admin_id' => $data->admin_id, 'tabel' => 0])
- ->andWhere(['slot_type_id' => Timetable::TIMESLOT_WORK])
+ // берём факты по флористу в указанном промежутке времени
+ $facts = TimetableFactModel::find()->where(['admin_id' => $data->admin_id])
->andWhere(['>=', 'date', date("Y-m-d", strtotime($data->date_from))])
->andWhere(['<=', 'date', date("Y-m-d", strtotime($data->date_to))])
->all();
- $plan_ids = ArrayHelper::getColumn($plans, 'id');
- // берём факты, которые указывают на выбранные ранее планы
- $facts = Timetable::find()->where(['plan_id' => $plan_ids])->all();
- // извлекаем отработанное время из фактов
- $workHoursPerPlanId = ArrayHelper::map($facts, 'plan_id', 'work_time');
+
$baseIncome = [];
- foreach ($plans as $plan) {
- /* @var $plan Timetable */
- if (!isset($workHoursPerPlanId[$plan->id])) {
- continue;
- }
+ foreach ($facts as $fact) {
// получаем отработку со временем для каждой запланированной смены
$baseIncome [] = [
- 'date' => $plan->date,
- 'shift_id' => $plan->shift_id,
- 'salary_shift' => $plan->salary_shift,
- 'price' => $plan->shift_id == 1 ? 125 : 145,
- 'work_hours' => $workHoursPerPlanId[$plan->id] ?? 0, // если план есть, а факта нет, то 0 чаов отработано
- 'in_shift' => count($plan->checkIns) == 1,
+ 'date' => $fact->date,
+ 'shift_id' => $fact->shift_id,
+ 'salary_shift' => $fact->salary_shift,
+ 'price' => $fact->shift_id == 1 ? 125 : 145,
+ 'work_hours' => $fact->work_time,
+ 'in_shift' => count($fact->checkIns) == 1,
];
}
$admin = Admin::findOne($data->admin_id);