2019-04-25 13:47:21 -07:00
|
|
|
<?php
|
|
|
|
|
|
2019-04-25 13:54:39 -07:00
|
|
|
namespace ProcessMaker\Model;
|
2019-04-25 13:47:21 -07:00
|
|
|
|
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
2019-05-23 16:30:49 -04:00
|
|
|
use Illuminate\Support\Facades\DB;
|
2019-04-25 13:47:21 -07:00
|
|
|
|
|
|
|
|
class Application extends Model
|
|
|
|
|
{
|
|
|
|
|
protected $table = "APPLICATION";
|
2020-03-20 11:26:49 -04:00
|
|
|
protected $primaryKey = 'APP_NUMBER';
|
|
|
|
|
public $incrementing = false;
|
2019-04-25 16:50:52 -07:00
|
|
|
// No timestamps
|
|
|
|
|
public $timestamps = false;
|
2019-06-10 15:04:14 -04:00
|
|
|
// Status id
|
|
|
|
|
const STATUS_DRAFT = 1;
|
|
|
|
|
const STATUS_TODO = 2;
|
|
|
|
|
const STATUS_COMPLETED = 3;
|
|
|
|
|
const STATUS_CANCELED = 4;
|
2020-10-21 16:56:11 -04:00
|
|
|
// Status name and status id
|
|
|
|
|
public static $app_status_values = ['DRAFT' => 1, 'TO_DO' => 2, 'COMPLETED' => 3, 'CANCELLED' => 4];
|
2019-04-25 14:15:41 -07:00
|
|
|
|
2021-03-30 10:03:46 -04:00
|
|
|
/**
|
|
|
|
|
* Current user related to the application
|
|
|
|
|
*/
|
2020-02-17 14:09:54 -04:00
|
|
|
public function currentUser()
|
2019-04-25 14:15:41 -07:00
|
|
|
{
|
2020-02-17 14:09:54 -04:00
|
|
|
return $this->belongsTo(User::class, 'APP_CUR_USER', 'USR_UID');
|
2019-04-25 14:15:41 -07:00
|
|
|
}
|
|
|
|
|
|
2021-03-30 10:03:46 -04:00
|
|
|
/**
|
|
|
|
|
* Creator user related to the application
|
|
|
|
|
*/
|
2020-02-17 14:09:54 -04:00
|
|
|
public function creatorUser()
|
2019-04-25 14:15:41 -07:00
|
|
|
{
|
2020-02-17 14:09:54 -04:00
|
|
|
return $this->belongsTo(User::class, 'APP_INIT_USER', 'USR_UID');
|
2019-04-25 14:15:41 -07:00
|
|
|
}
|
2019-05-23 16:30:49 -04:00
|
|
|
|
2020-10-23 17:32:12 -04:00
|
|
|
/**
|
2021-03-30 10:03:46 -04:00
|
|
|
* Scope a query to only include specific user
|
2020-10-23 17:32:12 -04:00
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
2021-03-30 10:03:46 -04:00
|
|
|
* @param int $user
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeUserId($query, $user)
|
|
|
|
|
{
|
|
|
|
|
return $query->where('APP_DELEGATION.USR_ID', '=', $user);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope for query to get the creator
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param string $usrUid
|
2020-10-23 17:32:12 -04:00
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
2021-03-30 10:03:46 -04:00
|
|
|
public function scopeCreator($query, $usrUid)
|
2020-10-23 17:32:12 -04:00
|
|
|
{
|
2021-03-30 10:03:46 -04:00
|
|
|
return $query->where('APP_INIT_USER', '=', $usrUid);
|
2020-10-23 17:32:12 -04:00
|
|
|
}
|
|
|
|
|
|
2019-05-23 16:30:49 -04:00
|
|
|
/**
|
2020-01-06 14:30:41 -04:00
|
|
|
* Scope for query to get the application by APP_UID.
|
2020-02-17 14:09:54 -04:00
|
|
|
*
|
2020-01-06 14:30:41 -04:00
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param string $appUid
|
2020-02-17 14:09:54 -04:00
|
|
|
*
|
2020-01-06 14:30:41 -04:00
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
2019-05-23 16:30:49 -04:00
|
|
|
*/
|
2020-01-06 14:30:41 -04:00
|
|
|
public function scopeAppUid($query, $appUid)
|
2019-05-23 16:30:49 -04:00
|
|
|
{
|
2021-03-30 10:03:46 -04:00
|
|
|
return $query->where('APP_UID', '=', $appUid);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope a query to only include specific cases by APP_UID
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param array $cases
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeSpecificCasesByUid($query, array $cases)
|
|
|
|
|
{
|
|
|
|
|
return $query->whereIn('APP_UID', $cases);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope for query to get the application by APP_NUMBER
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param int $appNumber
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeCase($query, $appNumber)
|
|
|
|
|
{
|
|
|
|
|
return $query->where('APPLICATION.APP_NUMBER', '=', $appNumber);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope for query to get the positive cases
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopePositiveCases($query)
|
|
|
|
|
{
|
|
|
|
|
return $query->where('APPLICATION.APP_NUMBER', '>', 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope a query to only include specific cases
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param array $cases
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeSpecificCases($query, array $cases)
|
|
|
|
|
{
|
|
|
|
|
return $query->whereIn('APPLICATION.APP_NUMBER', $cases);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope more than one range of cases
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param array $rangeCases
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeRangeOfCases($query, array $rangeCases)
|
|
|
|
|
{
|
2021-07-08 12:55:24 -04:00
|
|
|
$query->where(function ($query) use ($rangeCases) {
|
|
|
|
|
foreach ($rangeCases as $fromTo) {
|
|
|
|
|
$fromTo = explode("-", $fromTo);
|
|
|
|
|
if (count($fromTo) === 2) {
|
|
|
|
|
$from = $fromTo[0];
|
|
|
|
|
$to = $fromTo[1];
|
|
|
|
|
if ($to > $from) {
|
|
|
|
|
$query->orWhere(function ($query) use ($from, $to) {
|
|
|
|
|
$query->casesFrom($from)->casesTo($to);
|
|
|
|
|
});
|
|
|
|
|
}
|
2021-03-30 10:03:46 -04:00
|
|
|
}
|
|
|
|
|
}
|
2021-07-08 12:55:24 -04:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope more than one range of cases
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param array $cases
|
|
|
|
|
* @param array $rangeCases
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeCasesOrRangeOfCases($query, array $cases, array $rangeCases)
|
|
|
|
|
{
|
|
|
|
|
$query->where(function ($query) use ($cases, $rangeCases) {
|
|
|
|
|
// Get the cases related to the task self service
|
|
|
|
|
$query->specificCases($cases);
|
|
|
|
|
foreach ($rangeCases as $fromTo) {
|
|
|
|
|
$fromTo = explode("-", $fromTo);
|
|
|
|
|
if (count($fromTo) === 2) {
|
|
|
|
|
$from = $fromTo[0];
|
|
|
|
|
$to = $fromTo[1];
|
|
|
|
|
if ($to > $from) {
|
|
|
|
|
$query->orWhere(function ($query) use ($from, $to) {
|
|
|
|
|
$query->casesFrom($from)->casesTo($to);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
2021-03-30 10:03:46 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope a query to only include cases from a range
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param int $from
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeCasesFrom($query, int $from)
|
|
|
|
|
{
|
|
|
|
|
return $query->where('APPLICATION.APP_NUMBER', '>=', $from);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope a query to only include cases from a range
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param int $to
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeCasesTo($query, int $to)
|
|
|
|
|
{
|
|
|
|
|
return $query->where('APPLICATION.APP_NUMBER', '<=', $to);
|
2019-05-23 16:30:49 -04:00
|
|
|
}
|
|
|
|
|
|
2020-10-23 17:32:12 -04:00
|
|
|
/**
|
|
|
|
|
* Scope for query to get the application by status Id
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param integer $status
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeStatusId($query, int $status)
|
|
|
|
|
{
|
2021-03-30 10:03:46 -04:00
|
|
|
return $query->where('APP_STATUS_ID', '=', $status);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope a more status
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param array $statuses
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeStatusIds($query, array $statuses)
|
|
|
|
|
{
|
|
|
|
|
return $query->whereIn('APPLICATION.APP_STATUS_ID', $statuses);
|
2020-10-23 17:32:12 -04:00
|
|
|
}
|
|
|
|
|
|
2019-05-23 16:30:49 -04:00
|
|
|
/**
|
|
|
|
|
* Scope for query to get the applications by PRO_UID.
|
2020-01-06 14:30:41 -04:00
|
|
|
*
|
2019-05-23 16:30:49 -04:00
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param string $proUid
|
2020-01-06 14:30:41 -04:00
|
|
|
*
|
2019-05-23 16:30:49 -04:00
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeProUid($query, $proUid)
|
|
|
|
|
{
|
2021-03-30 10:03:46 -04:00
|
|
|
return $query->where('APPLICATION.PRO_UID', '=', $proUid);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope a query to only include a specific start date
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param string $from
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeStartDateFrom($query, string $from)
|
|
|
|
|
{
|
|
|
|
|
return $query->where('APPLICATION.APP_CREATE_DATE', '>=', $from);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope a query to only include a specific start date
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param string $to
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeStartDateTo($query, string $to)
|
|
|
|
|
{
|
|
|
|
|
return $query->where('APPLICATION.APP_CREATE_DATE', '<=', $to);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope a query to only include a specific finish date
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param string $from
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeFinishCaseFrom($query, string $from)
|
|
|
|
|
{
|
|
|
|
|
return $query->where('APPLICATION.APP_FINISH_DATE', '>=', $from);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope a query to only include a specific finish date
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param string $to
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeFinishCaseTo($query, string $to)
|
|
|
|
|
{
|
|
|
|
|
return $query->where('APPLICATION.APP_FINISH_DATE', '<=', $to);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope a query to only include a specific task
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
* @param int $task
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeTask($query, int $task)
|
|
|
|
|
{
|
|
|
|
|
return $query->where('APP_DELEGATION.TAS_ID', '=', $task);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope join with process
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeJoinProcess($query)
|
|
|
|
|
{
|
|
|
|
|
$query->leftJoin('PROCESS', function ($leftJoin) {
|
|
|
|
|
$leftJoin->on('APPLICATION.PRO_UID', '=', 'PROCESS.PRO_UID');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return $query;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Scope join with delegation
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
|
*/
|
|
|
|
|
public function scopeJoinDelegation($query)
|
|
|
|
|
{
|
|
|
|
|
$query->leftJoin('APP_DELEGATION', function ($leftJoin) {
|
|
|
|
|
$leftJoin->on('APPLICATION.APP_NUMBER', '=', 'APP_DELEGATION.APP_NUMBER');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return $query;
|
2019-05-23 16:30:49 -04:00
|
|
|
}
|
2020-01-06 14:30:41 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get Applications by PRO_UID, ordered by APP_NUMBER.
|
|
|
|
|
*
|
|
|
|
|
* @param string $proUid
|
|
|
|
|
*
|
|
|
|
|
* @return object
|
|
|
|
|
* @see ReportTables->populateTable()
|
|
|
|
|
*/
|
|
|
|
|
public static function getByProUid($proUid)
|
|
|
|
|
{
|
|
|
|
|
$query = Application::query()
|
|
|
|
|
->select()
|
|
|
|
|
->proUid($proUid)
|
2021-03-30 10:03:46 -04:00
|
|
|
->positiveCases()
|
2020-01-06 14:30:41 -04:00
|
|
|
->orderBy('APP_NUMBER', 'ASC');
|
|
|
|
|
return $query->get();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get information related to the created case
|
|
|
|
|
*
|
|
|
|
|
* @param string $appUid
|
|
|
|
|
*
|
|
|
|
|
* @return array|bool
|
|
|
|
|
*/
|
|
|
|
|
public static function getCase($appUid)
|
|
|
|
|
{
|
|
|
|
|
$query = Application::query()->select(['APP_STATUS', 'APP_INIT_USER']);
|
|
|
|
|
$query->appUid($appUid);
|
|
|
|
|
$result = $query->get()->toArray();
|
|
|
|
|
$firstElement = head($result);
|
|
|
|
|
|
|
|
|
|
return $firstElement;
|
|
|
|
|
}
|
2020-02-17 14:09:54 -04:00
|
|
|
|
2020-12-16 17:47:42 -04:00
|
|
|
/**
|
|
|
|
|
* Get app number
|
|
|
|
|
*
|
|
|
|
|
* @param string $appUid
|
|
|
|
|
*
|
|
|
|
|
* @return int
|
|
|
|
|
*/
|
|
|
|
|
public static function getCaseNumber($appUid)
|
|
|
|
|
{
|
|
|
|
|
$query = Application::query()->select(['APP_NUMBER'])
|
|
|
|
|
->appUid($appUid)
|
|
|
|
|
->limit(1);
|
|
|
|
|
$results = $query->get();
|
|
|
|
|
$caseNumber = 0;
|
|
|
|
|
$results->each(function ($item) use (&$caseNumber) {
|
|
|
|
|
$caseNumber = $item->APP_NUMBER;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return $caseNumber;
|
|
|
|
|
}
|
|
|
|
|
|
2020-02-17 14:09:54 -04:00
|
|
|
/**
|
|
|
|
|
* Update properties
|
|
|
|
|
*
|
|
|
|
|
* @param string $appUid
|
|
|
|
|
* @param array $fields
|
|
|
|
|
*
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public static function updateColumns($appUid, $fields)
|
|
|
|
|
{
|
|
|
|
|
$properties = [];
|
|
|
|
|
$properties['APP_ROUTING_DATA'] = !empty($fields['APP_ROUTING_DATA']) ? serialize($fields['APP_ROUTING_DATA']) : serialize([]);
|
|
|
|
|
|
|
|
|
|
// This column will to update only when the thread is related to the user
|
|
|
|
|
if (!empty($fields['APP_CUR_USER'])) {
|
|
|
|
|
$properties['APP_CUR_USER'] = $fields['APP_CUR_USER'];
|
|
|
|
|
}
|
|
|
|
|
Application::query()->appUid($appUid)->update($properties);
|
|
|
|
|
|
|
|
|
|
return $properties;
|
|
|
|
|
}
|
2020-10-23 17:32:12 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get Applications by PRO_UID, ordered by APP_NUMBER.
|
|
|
|
|
*
|
|
|
|
|
* @param string $proUid
|
|
|
|
|
* @param int $status
|
|
|
|
|
*
|
|
|
|
|
* @return object
|
|
|
|
|
* @see ReportTables->populateTable()
|
|
|
|
|
*/
|
|
|
|
|
public static function getCountByProUid(string $proUid, $status = 2)
|
|
|
|
|
{
|
|
|
|
|
$query = Application::query()
|
|
|
|
|
->select()
|
|
|
|
|
->proUid($proUid)
|
|
|
|
|
->statusId($status)
|
2021-03-30 10:03:46 -04:00
|
|
|
->positiveCases();
|
2020-10-23 17:32:12 -04:00
|
|
|
|
2020-12-16 17:47:42 -04:00
|
|
|
return $query->get()->count(['APP_NUMBER']);
|
2020-10-23 17:32:12 -04:00
|
|
|
}
|
2019-04-25 13:47:21 -07:00
|
|
|
}
|