Joywork/api/v2/app/src/controllers/ContractsController.php

248 lines
6.9 KiB
PHP
Raw Normal View History

2026-05-22 20:21:54 +02:00
<?php
namespace App\v2\Controller;
class ContractsController extends ApiController
{
public function getContracts($app, $get = null, $post = null) {
$start_time = microtime(true);
$error = false;
$errors = [];
$reference_id = null;
if (isset($get['reference_id']))
$reference_id = $get['reference_id'];
$sources_ids = null;
if (isset($get['sources_ids']))
$sources_ids = $get['sources_ids'];
$section = $get['section'];
$type = null;
if ($section == "clients")
$type = 'client';
else if ($section == "requisitions")
$type = 'req';
else if ($section == "objects")
$type = 'object';
$contracts = [];
if (($user_id = $_SESSION['id']) && $type && (!empty($reference_id) || ($sources_ids && is_array($sources_ids)))) {
// Открываем соединение с БД
$mdb = $app->container->get('mysql');
$pdo = $app->container->get('mypdo');
$contracts_ins = new \Contract();
if ($reference_id) {
$contracts = $contracts_ins->getContractsByRef($reference_id, $type);
} else {
foreach ($sources_ids as $source_id) {
$contract = $contracts_ins->getContract($source_id, $type);
if (is_array($contract)) {
if (isset($contract['date_start']))
$contract['date_start'] = date('Y-m-d', strtotime($contract['date_start']));
if (isset($contract['date_end']))
$contract['date_end'] = date('Y-m-d', strtotime($contract['date_end']));
}
$contracts[] = $contract;
}
}
$app->response->header('Content-Type', 'application/json');
$app->response->setStatus(200);
$app->response->setBody(json_encode([
'success' => !$error,
'user_id' => (int)$user_id,
'overage_time' => round((microtime(true) - $start_time), 3) . " sec.",
'list' => $contracts
], JSON_UNESCAPED_UNICODE));
$app->stop();
}
$app->response->header('Content-Type', 'application/json');
$app->response->setStatus(200);
$app->response->setBody(json_encode([
'success' => false,
'user_id' => $_SESSION['id'],
'errors' => $errors,
'overage_time' => round((microtime(true) - $start_time), 3) . " sec.",
], JSON_UNESCAPED_UNICODE));
$app->stop();
}
public function getContract($app, $get = null, $post = null) {
$error = false;
$errors = [];
$source_id = intval($get['source_id']);
$section = $get['section'];
$type = null;
if ($section == "clients")
$type = 'client';
else if ($section == "requisitions")
$type = 'req';
else if ($section == "objects")
$type = 'object';
if (($user_id = $_SESSION['id']) && ($source_id && $source_id != 0) && $type) {
// Открываем соединение с БД
$mdb = $app->container->get('mysql');
$pdo = $app->container->get('mypdo');
$contracts_ins = new \Contract();
$contract = $contracts_ins->getContract($source_id, $type);
if (isset($contract['date_start']))
$contract['date_start'] = date('Y-m-d', strtotime($contract['date_start']));
if (isset($contract['date_end']))
$contract['date_end'] = date('Y-m-d', strtotime($contract['date_end']));
$app->response->header('Content-Type', 'application/json');
$app->response->setStatus(200);
$app->response->setBody(json_encode([
'success' => !$error,
'user_id' => (int)$user_id,
'item' => $contract
], JSON_UNESCAPED_UNICODE));
$app->stop();
}
$app->response->header('Content-Type', 'application/json');
$app->response->setStatus(200);
$app->response->setBody(json_encode([
'success' => false,
'user_id' => $_SESSION['id'],
'errors' => $errors,
], JSON_UNESCAPED_UNICODE));
$app->stop();
}
public function addEditContract($app, $get = null, $post = null, $need_return = false) {
$error = false;
$errors = [];
if (!empty($post)) {
$data = $post;
} else {
$body = $app->request->getBody();
$data = json_decode($body, true);
}
$section = $data['section'];
$source_id = intval($data['source_id']);
$parent_id = (isset($data['parent_id'])) ? trim($data['parent_id']) : null;
$parent_type = null;
if ($section == "clients")
$parent_type = 'client';
else if ($section == "requisitions")
$parent_type = 'req';
else if ($section == "objects")
$parent_type = 'object';
if (($user_id = $_SESSION['id']) && $parent_type) {
// Открываем соединение с БД
$mdb = $app->container->get('mysql');
$pdo = $app->container->get('mypdo');
$id = (isset($data['id'])) ? trim($data['id']) : null;
$type = (isset($data['type'])) ? $data['type'] : null;
$number = (isset($data['number'])) ? trim($data['number']) : "";
$date_start = (isset($data['date_start'])) ? trim($data['date_start']) : null;
$date_end = (isset($data['date_end'])) ? trim($data['date_end']) : null;
$notify_days = (isset($data['notify_days'])) ? intval($data['notify_days']) : 0;
$is_notified = (isset($data['is_notified'])) ? intval($data['is_notified']) : 0;
$object = (isset($data['object'])) ? $data['object'] : [];
$requisitions = (isset($data['requisitions'])) ? $data['requisitions'] : [];
$contract = [
'id' => $id,
'parent_id' => $parent_id,
'parent_type' => $parent_type,
'number' => $number,
'type' => $type,
'date_start' => $date_start,
'date_end' => $date_end,
'days_mes_end' => $notify_days,
'no_mes_end' => $is_notified,
//'contracts_object' => json_encode($object),
//'contract_req_id' => json_encode($requisitions),
];
if ($section == "clients")
$contract['parent_id'] = $source_id;
else if ($section == "requisitions")
$contract['parent_id'] = $source_id;
else if ($section == "objects")
$contract['parent_id'] = $source_id;
$contracts_ins = new \Contract();
if (!isset($contract['id']) && isset($results['id']))
$contract['id'] = (int)$results['id'];
if (!isset($contract['date_start']))
$contract['date_start'] = null;
if (!isset($contract['date_end']))
$contract['date_end'] = null;
$agency_id = \User::getAgencyIdForUser($user_id);
$contracts_ins->setAgencyId($agency_id);
$results = $contracts_ins->editAdd($contract);
if ($need_return) {
if ($results['source'] == "done") {
return $contract;
} else {
return false;
}
} else {
if ($results['source'] == "done") {
$app->response->header('Content-Type', 'application/json');
$app->response->setStatus(200);
$app->response->setBody(json_encode([
'success' => true,
'user_id' => (int)$user_id,
'item' => $contract,
], JSON_UNESCAPED_UNICODE));
$app->stop();
} else {
$error = true;
$errors[] = $results['sql'];
$errors[] = $results['mes'];
}
}
}
if ($need_return) {
return false;
} else {
$app->response->header('Content-Type', 'application/json');
$app->response->setStatus(200);
$app->response->setBody(json_encode([
'success' => false,
'user_id' => $_SESSION['id'],
'errors' => $errors,
], JSON_UNESCAPED_UNICODE));
$app->stop();
}
}
}