HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/dev-beg.teky.com.co/app/Http/Controllers/Api/HomeApiController.php
<?php

namespace App\Http\Controllers\Api;

use App\User;
use App\Area;
use App\Form;
use App\Field;
use App\Formula;
use App\FormField;
use App\Equipment;
use App\TypeEvent;
use App\TypeFilter;
use App\MeasurementDocument;

use DB;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;

class HomeApiController extends Controller
{
    public $value_min_oz;

    public function __construct()
    {
        $this->value_min_oz = 16;
    }

    public function listZones()
    {
        try {
            $userZones = User::where('id', Auth::user()->id)->with('zones')->first();
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('userZones' => $userZones)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => null));
        }
    }

    public function listAreas($zone_id)
    {
        try {
            $areas = Area::where('zone_id', $zone_id)->with('zone')->get();
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('areas' => $areas)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => null));
        }
    }

    public function listEquipments($area_id)
    {
        try {
            $equipments = Equipment::where('area_id', $area_id)->get();
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('equipments' => $equipments)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => null));
        }
    }

    public function listForms($area_id)
    {
        try {
            $forms = Area::where('id', $area_id)->with(['forms','equipment'])->get();
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('forms' => $forms)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => null));
        }
    }

    public function listFields($form_id,$area_id)
    {
        try {
            $fields = Form::where('id', $form_id)->with(['fields'])->get();
            $statusOptimalDate = false;
            foreach ($fields[0]->fields as $key => $field) {
                if($field->calculated){
                    $formula = $this->valueFormula($field->calculated_formula_id);
                    $valueExtenal = MeasurementDocument::where([
                        ['form_id', $field->calculated_form_id],
                        ['field_id', $field->calculated_field_id],
                        ['area_id', $area_id]
                    ])->latest()->first();

                    $value = $valueExtenal->created_at->addDays(2);
                    $optimalDate = str_replace("T"," ", $value);
                    $optimalDate = substr($optimalDate, 0, 10);

                    $date = Carbon::now();
                    $current_date = $date->toDateString();

                    if($optimalDate >= $current_date){
                        $statusOptimalDate = true;
                    }

                    $valueDataExternal = floatval($valueExtenal->value);
                    $area = Area::where('id', $area_id)->first();
                    if($valueDataExternal > 0 && $area->volume != null && $valueDataExternal < floatval($field->field_value->value) && $statusOptimalDate ||
                        $field->id == 32 && !$this->is_negative_number($valueDataExternal) && $area->volume != null && $valueDataExternal < floatval($field->field_value->value) && $statusOptimalDate){
                        if($field->id == 33){
                            $difference = floatval($field->field_value->value) * 10;
                        }else{
                            $difference = abs(floatval($field->field_value->value) - $valueDataExternal);
                        }
                        $value_swinging = $this->formulaPoseidon(floatval($formula->value_table),floatval($area->volume),$difference);
                        if ($this->is_decimal($value_swinging)) {
                            $value_swinging = number_format($value_swinging,2);
                        }
                        $field->field_value->value = $this->convert_unit($value_swinging);
                    }else{
                        $field->field_value->value = 0;
                    }
                }
                $area_volume = Area::where('id',$area_id)->first()->volume;
                if($field->id == 40){
                    $phospate_remover = (4/10000)*intval($area_volume);
                    if($phospate_remover >= 128){
                        $phospate_remover = $phospate_remover/128;
                        $field->field_value->value = $phospate_remover.' Gallons';
                    }else{
                        $field->field_value->value = $phospate_remover.' Oz-Lq';
                    }
                }
                if($field->id == 5){
                    $area = Area::where('id', $area_id)->first();
                    if($area->area_type_id == 2){
                        $temp_spa = Field::where('id', 26)->with('field_input','field_value','field_datasource')->first();
                        $fields[0]->fields[$key] = $temp_spa;
                    }
                }
            }
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('fields' => $fields, 'statusOptimalDate' => $statusOptimalDate)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => null, 'e' => $e->getMessage()));
        }
    }

    public function is_negative_number($number=0){
        if( is_numeric($number) && ($number<0) ){
            return true;
        }else{
            return false;
        }
    }

    public function convert_unit($value_onza)
    {
        if($value_onza > $this->value_min_oz){
            return $value_onza/16 . " lbs";
        }else{
            return $value_onza . " oz";
        }
    }

    public function is_decimal( $val )
    {
        return is_numeric( $val ) && floor( $val ) != $val;
    }

    public function formulaPoseidon($value_table,$volumen,$difference)
    { // calcula el blance ch, ta, cya, fc
        return $value_table * ($volumen/10000) * ($difference/10);
    }

    public function valueFormula($formula_id)
    {
        return Formula::where('id', $formula_id)->first();
    }

    public function getInfoFilterP1(Request $request)
    {
        try {
            if($request->type_form == 'equipment'){
                $lastChangeFilter = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['equipment_id',$request->equipment_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 28]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();
                $lastCleanFilter = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['equipment_id',$request->equipment_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 29]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();
            }else{
                $lastChangeFilter = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 28]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();
                $lastCleanFilter = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 29]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();
            }
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('lastChangeFilter' => $lastChangeFilter, 'lastCleanFilter' => $lastCleanFilter)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => $e->getMessage()));
        }
    }

    public function getInfoFilterP2(Request $request)
    {
        try {
            if($request->type_form == 'equipment'){
                $lastChangeFilter = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['equipment_id',$request->equipment_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 19]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();
                $lastCleanFilter = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['equipment_id',$request->equipment_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 20]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();
            }else{
                $lastChangeFilter = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 19]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();
                $lastCleanFilter = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 20]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();
            }
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('lastChangeFilter' => $lastChangeFilter, 'lastCleanFilter' => $lastCleanFilter)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => $e->getMessage()));
        }
    }

    public function getInfoFilterP3(Request $request)
    {
        try {
            if($request->type_form == 'equipment'){
                $lastBackwashFilter = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['equipment_id',$request->equipment_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 34]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();
            }else{
                $lastBackwashFilter = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 34]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();
            }
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('lastBackwashFilter' => $lastBackwashFilter)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => $e->getMessage()));
        }
    }

    public function getInfoFilterP4(Request $request)
    {
        try {
            if($request->type_form == 'equipment'){
                $lastCleanStrainer = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['equipment_id',$request->equipment_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 39]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();

                $lastBearingChanging = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['equipment_id',$request->equipment_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 41]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();  
                                                
                $lastSealChange = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['equipment_id',$request->equipment_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 42]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first(); 
            }else{
                $lastCleanStrainer = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 39]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();

                $lastBearingChanging = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 41]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();  
                                                    
                $lastSealChange = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['form_id',$request->form_id],
                                                ['field_id', 42]
                                                ])
                                                ->whereNotNull('value')
                                                ->latest()
                                                ->first();
            }
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('lastCleanStrainer' => $lastCleanStrainer, 'lastBearingChanging' => $lastBearingChanging, 'lastSealChange' => $lastSealChange)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => $e->getMessage()));
        }
    }

    public function existMeasurementDocument(Request $request)
    {
        $date = Carbon::now();
        $current_date = $date->toDateString();
        try {
            if($request->type_form == 'equipment'){
                $record = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['equipment_id',$request->equipment_id],
                                                ['form_id',$request->form_id]
                                                ])
                                                ->whereBetween('created_at', [$current_date." 00:00:00", $current_date." 23:59:59"])
                                                ->get()
                                                ->max('record');
            }else{
                $record = MeasurementDocument::where([
                                                ['area_id', $request->area_id],
                                                ['form_id',$request->form_id]
                                                ])
                                                ->whereBetween('created_at', [$current_date." 00:00:00", $current_date." 23:59:59"])
                                                ->get()
                                                ->max('record');
            }
            $form = Form::select('number_records')->where('id', $request->form_id)->first();
            $status = false;
            if($record >= $form->number_records){
                $status = true;
            }
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('status' => $status, 'record' => $record)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => $e->getMessage()));
        }
    }

    public function historyMeasurementDocument(Request $request)
    {
        $date = Carbon::now();
        try {
            if($request->type_form == 'equipment'){
                $records = MeasurementDocument::where([
                                                    ['area_id', $request->area_id],
                                                    ['equipment_id', $request->equipment_id],
                                                    ['form_id', $request->form_id]
                                                ])
                                                ->with('area','operator','field')
                                                ->whereBetween('created_at', [$date->subDays($request->subDay), Carbon::now()])
                                                ->orderBy('created_at', 'desc')
                                                ->get()
                                                ->groupBy(['code']);
            }else{
                $records = MeasurementDocument::where([
                                                    ['area_id', $request->area_id],
                                                    ['form_id', $request->form_id]
                                                ])
                                                ->with('area','operator','field')
                                                ->whereBetween('created_at', [$date->subDays($request->subDay), Carbon::now()])
                                                ->orderBy('created_at', 'desc')
                                                ->get()
                                                ->groupBy(['code']);
            }
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('records' => $records)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => $e->getMessage()));
        }
    }

    public function getCode()
    {
        return dechex(time()) . "-" . rand(1, 9) . rand(1, 5);
    }

    public function saveDataForm(Request $request)
    {
        try {
            $date = Carbon::now();
            $current_date = $date->toDateString();

            if($request["master"]["type_form"] == 'equipment'){
                $document = MeasurementDocument::where([
                        ['area_id', $request["master"]["area_id"]],
                        ['equipment_id', $request["master"]["equipment_id"]],
                        ['form_id', $request["master"]["form_id"]],
                        ['record', $request["master"]["record"]]
                    ])
                    ->whereBetween('created_at', [$current_date." 00:00:00", $current_date." 23:59:59"])
                    ->first();
            }else{
                $document = MeasurementDocument::where([
                        ['area_id', $request["master"]["area_id"]],
                        ['form_id', $request["master"]["form_id"]],
                        ['record', $request["master"]["record"]]
                    ])
                    ->whereBetween('created_at', [$current_date." 00:00:00", $current_date." 23:59:59"])
                    ->first();
            }
            if(!isset($document->id)){
                $form = Form::where('id', $request["master"]["form_id"])->first();
                $code = str_replace("-","", $form->name).'-'.$this->getCode();
                foreach ($request->all() as $key => $value) {
                    if($key != "master"){
                        $field = Field::where('name_control', $key)->first();
                        if($field->field_input_id && $field->field_input_id == 4){
                            $value = str_replace("T"," ", $value);
                            $currentValue = substr($value, 0, strpos($value, "."));
                        }else if($field->field_input_id && $field->field_input_id == 1){
                            if(is_array($value)){
                                $currentValue = implode(', ', $value);
                            }else{
                                $currentValue = $value;
                            }
                        }else{
                            $currentValue = $value;
                        }
                        MeasurementDocument::create([
                            "value" => $currentValue,
                            "operator_id" => Auth::user()->id,
                            "area_id" => $request["master"]["area_id"],
                            "form_id" => $request["master"]["form_id"],
                            "equipment_id" => $request["master"]["type_form"] == 'equipment' ? $request["master"]["equipment_id"] : null,
                            "field_id" => $field->id,
                            "record" => $request["master"]["record"],
                            "code" => $code
                        ]);
                    }
                }
                return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => null));
            }else{
                return response(array("status" => false, "type" => "danger", "title" => "Oops", "message" => __('document_exist'), "data" => null));
            }
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => array('m' => $e->getMessage())));
        }
    }

    public function updateValueField(Request $request)
    {
        try {
            MeasurementDocument::where('id', $request->measurement_id)->update(['value' => $request->value]);
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => null));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => array('m' => $e->getMessage())));
        }
    }

    public function typeFilters()
    {
        try {
            $data = TypeFilter::where('active', 1)->get();
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('data' => $data)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => array('m' => $e->getMessage())));
        }
    }

    public function typeEvents()
    {
        try {
            $data = TypeEvent::where('active', 1)->get();
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('data' => $data)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => array('m' => $e->getMessage())));
        }
    }

    public function deleteMeasurementDocuments(Request $request)
    {
        try {
            MeasurementDocument::where('code', $request->code)->delete();
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => null));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => array('m' => $e->getMessage())));
        }
    }

    public function listMeasurementDocuments(Request $request)
    {
        try {
            $documents = [];
            if($form = MeasurementDocument::select('form_id')->where([['code', 'like', '%' . $request->code . '%']])->first()){
                $count = FormField::where('form_id', $form->form_id)->count();
                $offset = $count * intval($request->offset);
                $take = $count * intval($request->take);

                $documents = MeasurementDocument::where([['code', 'like', '%' . $request->code . '%']])->with('area','operator','field');

                if($request["filters"]["area_id"]){
                    $documents = $documents->where('area_id',$request["filters"]["area_id"]);
                }

                if($request["filters"]["equipment_id"]){
                    $documents = $documents->where('equipment_id',$request["filters"]["equipment_id"]);
                }

                if($request["filters"]["start_date"] && $request["filters"]["final_date"]){
                    $documents = $documents->whereBetween('created_at', [$request["filters"]["start_date"]." 00:00:00", $request["filters"]["final_date"]." 23:59:59"]);
                }
                $documents = $documents->take($take)->offset($offset)->get()->groupBy(['code']);
            }
            return response(array("status" => true, "type" => "success", "title" => "", "message" => "", "data" => array('documents' => $documents)));
        } catch (\Exception $e) {
            return response(array("status" => false, "type" => "error", "title" => "Oops...", "message" => __('error_search'), "data" => array('m' => $e->getMessage())));
        }
    }
}