File: /home/imensosw/www/ezwork/app/Models/UserContract.php
<?php
/**
* UserContractModel class file
*
* PHP Version 7.2
*
* @category Model
* @package Ez
* @author Imenso Software <admin@imensosoftware.com>
* @license http://imensosoftware/license.php GNU Public License
* @link http://imensosoftware.com/recipes
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\UserSkillPair;
/**
* UserContractModel class
*
* The class manage User Contract related queries
*
* @category UserContractModel
* @package Ez
* @author Imenso Software <admin@imensosoftware.com>
* @license http://imensosoftware/license.php GNU Public License
* @link http://imensosoftware.com/recipes
*/
class UserContract extends Model
{
public $table = 'user_contracts';
public $fillable = [
'user_id',
'from_language_id',
'to_language_id',
'status_id',
'country_id',
'rating',
'translator_flag_id',
'translator_type_id',
'fixed_income',
'proofreading_status_id',
'translation_words',
'proofreading_words',
'translation_price',
'proofreading_price',
'contract_file',
'contract_sent_date',
'contract_accept_date',
];
/**
* GetUserContract function get the contract of specified users
* and return list of contracts.
*
* @param array data
* @return \App\Models\UserEvaluation
*/
public static function getUserContract($data)
{
$user_id = $data['user_id'];
$userSkillPairs = UserSkillPair::join(
'languages as from_languages',
'from_languages.id',
'=',
'user_skill_pairs.from_language_id'
)->join(
'languages as to_languages',
'to_languages.id',
'=',
'user_skill_pairs.to_language_id'
)->leftJoin(
'user_contracts',
function ($join) use ($user_id) {
$join->on('user_contracts.user_id', '=', 'user_skill_pairs.user_id')
->on('user_contracts.from_language_id', '=', 'user_skill_pairs.from_language_id')
->on('user_contracts.to_language_id', '=', 'user_skill_pairs.to_language_id');
}
)
->leftJoin('status', 'status.id', '=', 'user_contracts.status_id')
->leftJoin(
'translator_types',
'translator_types.id',
'=',
'user_contracts.translator_type_id'
)
->leftJoin(
'translator_flags',
'translator_flags.id',
'=',
'user_contracts.translator_flag_id'
)
->leftJoin(
'countrys',
'countrys.id',
'=',
'user_contracts.country_id'
)
->select(
'user_contracts.*',
'user_skill_pairs.id as user_skill_pair_id',
'user_skill_pairs.from_language_id as from_id',
'user_skill_pairs.to_language_id as to_id',
'from_languages.language_l as from_language',
'to_languages.language_l as to_language',
'translator_types.translator_type',
'translator_flags.translator_flag',
'countrys.currency'
)
->where('user_skill_pairs.user_id', $user_id)->orderBy('user_contracts.status_id', 'desc')
->get();
$data = [];
foreach ($userSkillPairs as $userSkillPair) {
$userEvaluation = \App\Models\UserEvaluation::
join('evaluations', 'evaluations.id', '=', 'user_evaluations.evaluation_id')
->where('evaluations.from_language_id', $userSkillPair->from_id)
->where('evaluations.to_language_id', $userSkillPair->to_id)
->where('user_evaluations.evaluation_status_id', 4)
->where('user_evaluations.user_id', $user_id)->first();
if ($userEvaluation) {
$userSkillPair['evaluation_status_id'] = $userEvaluation->evaluation_status_id;
$userSkillPair['evaluation_rating'] = $userEvaluation->rating;
$data[] = $userSkillPair;
} else {
$userSkillPair['evaluation_status_id'] = 1;
$userSkillPair['evaluation_rating'] = 0;
$data[] = $userSkillPair;
}
}
$oldContracts = self::join(
'languages as from_languages',
'from_languages.id',
'=',
'user_contracts.from_language_id'
)->join(
'languages as to_languages',
'to_languages.id',
'=',
'user_contracts.to_language_id'
)->leftJoin(
'user_skill_pairs',
function ($join) use ($user_id) {
$join->on('user_contracts.user_id', '=', 'user_skill_pairs.user_id')
->on('user_contracts.from_language_id', '=', 'user_skill_pairs.from_language_id')
->on('user_contracts.to_language_id', '=', 'user_skill_pairs.to_language_id');
}
)
->leftJoin('status', 'status.id', '=', 'user_contracts.status_id')
->leftJoin(
'translator_types',
'translator_types.id',
'=',
'user_contracts.translator_type_id'
)
->leftJoin(
'translator_flags',
'translator_flags.id',
'=',
'user_contracts.translator_flag_id'
)
->leftJoin(
'countrys',
'countrys.id',
'=',
'user_contracts.country_id'
)
->select(
'user_contracts.*',
'user_skill_pairs.id as user_skill_pair_id',
'user_skill_pairs.from_language_id as from_id',
'user_skill_pairs.to_language_id as to_id',
'from_languages.language_l as from_language',
'to_languages.language_l as to_language',
'translator_types.translator_type',
'translator_flags.translator_flag',
'countrys.currency'
)
->where('user_contracts.user_id', $user_id)->whereNull('user_skill_pairs.id')->get();
if ($oldContracts) {
foreach ($oldContracts as $oldContract) {
$userEvaluation = \App\Models\UserEvaluation::join(
'evaluations',
'evaluations.id',
'=',
'user_evaluations.evaluation_id'
)
->where('evaluations.from_language_id', $oldContract->from_id)
->where('evaluations.to_language_id', $oldContract->to_id)
->where('user_evaluations.evaluation_status_id', 4)
->where('user_evaluations.user_id', $user_id)->first();
if ($userEvaluation) {
$oldContract['evaluation_status_id'] = $userEvaluation->evaluation_status_id;
$oldContract['evaluation_rating'] = $userEvaluation->rating;
$data[] = $oldContract;
} else {
$oldContract['evaluation_status_id'] = 1;
$oldContract['evaluation_rating'] = 0;
$data[] = $oldContract;
}
}
}
return $data;
}
// end getUserContract()
}
// end class