public function getSavedValuesAttribute()
 {
     $val = \App\MeterValue::where('file_id', $this->id)->count();
     return $val > 0 ? $val : null;
 }
 public function postSaveDetail(Request $request)
 {
     if ($request->input('pk', false)) {
         $value = \App\MeterValue::find($request->input('pk'));
     } else {
         $value = new \App\MeterValue();
         $value->file_id = $request->input('file_id');
         $value->meter_id = $request->input('meter_id');
     }
     if ($request->input('value') == '') {
         $value->delete();
         return response('Очищен', 200);
     }
     $nv = str_replace(",", ".", (string) $request->input('value'));
     $value->date = \Carbon\Carbon::now();
     $value->value = $nv;
     $value->save();
     return response('', 200);
 }
 public function save(Request $request)
 {
     if (!session()->has('can-save')) {
         return json_encode(['success' => false, 'errors' => ['Ошибка прав доступа на сохранение показаний, обратитесь Вашу Управляющую организацию.']]);
     }
     session()->flash('can-save', '1');
     $file = \App\MeterFile::where('active', 1)->first();
     if (!$file) {
         return json_encode(['success' => false, 'errors' => ['Данные на загружены, обратитесь Вашу Управляющую организацию.']]);
     }
     $sdata = $request->input('sdata', false);
     if (!$sdata) {
         return json_encode(['success' => false, 'errors' => ['Ошибка в данных, обратитесь Вашу Управляющую организацию.']]);
     }
     if (strpos($sdata, ":") === false) {
         return json_encode(['success' => false, 'errors' => ['Ошибка в данных, обратитесь Вашу Управляющую организацию.']]);
     }
     $apartment_id = explode(':', $sdata)[0];
     $file_id = explode(':', $sdata)[1];
     if ($file->id != $file_id) {
         return json_encode(['success' => false, 'errors' => ['Данные на загружены, обратитесь Вашу Управляющую организацию.']]);
     }
     $apartment = \App\Apartment::find($apartment_id);
     if (!$apartment) {
         return json_encode(['success' => false, 'errors' => ['Ошибка в данных, обратитесь Вашу Управляющую организацию.']]);
     }
     $ls = $apartment->ls;
     $meters = $request->input('meter');
     $errors = [];
     $errorsFields = [];
     $saving = [];
     $people = $apartment->people <= 0 ? 1 : $apartment->people;
     foreach ($meters as $key => $value) {
         $meter = \App\Meter::where('id', $key)->where('apartment_id', $apartment->id)->first();
         if (!$meter) {
             array_push($errors, 'ER03:' . $key . ' - системная ошибка, обратитесь Вашу Управляющую организацию и сообщите код ошибки.');
         }
         if (empty($value)) {
             $new_value = \App\MeterValue::where('file_id', $file_id)->where('meter_id', $key)->first();
             if ($new_value) {
                 $new_value->date = \Carbon\Carbon::now();
                 $new_value->value = $value;
                 array_push($saving, $new_value);
             }
             continue;
         }
         $val = floatval($value);
         if ($val < 0) {
             array_push($errors, 'Показания счетчика <b>' . $meter->service->name . '</b> не могут быть отрицательными.');
             array_push($errorsFields, $meter->id);
             continue;
         }
         $norm = $meter->service->norm;
         if ($norm > 0) {
             if ($meter->last_value > $val) {
                 array_push($errors, 'Показания счетчика <b>' . $meter->service->name . '</b> не могут быть меньше предыдущих.');
                 array_push($errorsFields, $meter->id);
                 continue;
             }
             $mx = $meter->service->additional;
             $max_value = $meter->last_value + ($people * $norm + $norm * $mx);
             if ($val > $max_value) {
                 array_push($errors, 'К сожалению, показания счетчика <b>' . $meter->service->name . '</b> не могут превышать установленный предел, максимальное значение составляет&nbsp;<b>' . round($max_value, 3) . '</b>. Пожалуйста установите значение меньше или передайте показания по телефону.');
                 array_push($errorsFields, $meter->id);
                 continue;
             }
             $new_value = \App\MeterValue::where('file_id', $file_id)->where('meter_id', $key)->first();
             if ($new_value) {
                 $new_value->date = \Carbon\Carbon::now();
                 $new_value->value = $value;
             } else {
                 $new_value = new \App\MeterValue();
                 $new_value->file_id = $file_id;
                 $new_value->meter_id = $key;
                 $new_value->ls = $apartment->ls;
                 $new_value->meter_code = $meter->meter_id;
                 $new_value->date = \Carbon\Carbon::now();
                 $new_value->value = $value;
             }
             array_push($saving, $new_value);
         } else {
             $new_value = \App\MeterValue::where('file_id', $file_id)->where('meter_id', $key)->first();
             if ($new_value) {
                 $new_value->date = \Carbon\Carbon::now();
                 $new_value->value = $value;
             } else {
                 $new_value = new \App\MeterValue();
                 $new_value->file_id = $file_id;
                 $new_value->meter_id = $key;
                 $new_value->ls = $apartment->ls;
                 $new_value->meter_code = $meter->meter_id;
                 $new_value->date = \Carbon\Carbon::now();
                 $new_value->value = $value;
             }
             array_push($saving, $new_value);
         }
     }
     if (count($errors) > 0) {
         return json_encode(['success' => false, 'errors' => $errors, 'efields' => $errorsFields]);
     } else {
         if (count($saving) > 0) {
             foreach ($saving as $nv) {
                 if ($nv->value == 0) {
                     $nv->delete();
                 } else {
                     $nv->save();
                 }
             }
         } else {
             return json_encode(['success' => true, 'empty' => true]);
         }
         return json_encode(['success' => true, 'message' => 'Показания успешно сохранены.']);
     }
 }