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())));
}
}
}