2021-11-15 15:01:54 +00:00
< ? php
namespace App\Http\Controllers ;
2022-03-28 23:49:57 +00:00
use App\InsuranceState ;
use App\Models\CountriesCurrency ;
2021-11-15 15:01:54 +00:00
use App\Models\Network ;
use App\Models\NhInsurance ;
use App\Models\User ;
use App\Models\WalletsUser ;
use App\Traits\ApiResponser ;
use App\Traits\Helper ;
use Illuminate\Http\Request ;
use Illuminate\Http\Response ;
use Illuminate\Support\Facades\DB ;
use Illuminate\Support\Facades\File ;
use Illuminate\Support\Facades\Log ;
use stdClass ;
class InsuredController extends Controller
{
/**
* @ OA\Get (
2021-11-15 15:59:42 +00:00
* path = " /insured " ,
2021-11-19 16:07:42 +00:00
* summary = " Rechercher un assuré (par reseau , par nom ou par numero de telephone) " ,
2021-11-15 15:01:54 +00:00
* tags = { " Assurés " },
* security = {{ " api_key " : {}}},
2021-11-19 16:07:42 +00:00
* @ OA\Parameter (
* parameter = " network_id " ,
* name = " network_id " ,
* description = " ID du reseau " ,
* @ OA\Schema (
* type = " integer "
* ),
* in = " query " ,
* required = true
* ),
2022-01-18 11:00:05 +00:00
* @ OA\Parameter (
* parameter = " insured_id " ,
* name = " insured_id " ,
* description = " Numero d'assuré " ,
* @ OA\Schema (
* type = " string "
* ),
* in = " query " ,
* required = false
* ),
2021-11-15 15:01:54 +00:00
* @ OA\Parameter (
* parameter = " name " ,
* name = " name " ,
* description = " Nom de l'utilisateur " ,
* @ OA\Schema (
* type = " string "
* ),
* in = " query " ,
* required = false
* ),
* @ OA\Parameter (
* parameter = " phone " ,
* name = " phone " ,
* description = " Telephone de l'utilisateur " ,
* @ OA\Schema (
* type = " string "
* ),
* in = " query " ,
* required = false
* ),
* @ OA\Response (
* response = 200 ,
* description = " OK " ,
* @ OA\JsonContent (
* ref = " #/components/schemas/ApiResponse " ,
* example = {
* " status " : 200 ,
2022-05-10 07:33:23 +00:00
* " response " : {{ " id " : 13 , " network_id " : 250 , " user_id " : 348 , " insured_id " : " PWXVMZNXN39P " , " months_grid_id " : 77 , " bonus_amount " : " 50000.00 " , " number_of_beneficiaries " : 1 , " total_bonus_amount " : " 115000.00 " , " insurance_coverage_amount " : " 546560.00 " ,
* " start_at " : " 2022-03-31T00:00:00.000000Z " , " end_at " : " 2023-03-31T00:00:00.000000Z " , " state " : " PAID " , " created_at " : " 2022-03-31T11:49:07.000000Z " , " updated_at " : " 2022-04-12T17:15:26.000000Z " , " insurance_consumed_amount " : " 546 \ u202f560 FCFA " , " insurance_remaining_amount " : " -46 \ u202f560 FCFA " ,
* " user " : { " id " : 348 , " firstname " : null , " lastname " : " Manga test 5 " , " phone " : " +241074848105 " , " email " : " jmangansongo.cfao@yahoo.fr " , " identification " : { " firstname " : " " , " lastname " : " Manga test 5 " , " user_image " : " U-1606826475.jpg " , " document_image_front " : " D-F-1606826475.jpg " ,
* " document_image_back " : " D-B-1606826475.jpg " , " id_user " : 348 }}, " network " : { " id " : 250 , " name " : " Cnamgs-pharmacies " }, " beneficiaries " : {{ " id " : 5 , " lastname " : " Zele " , " firstname " : " Brice " , " gender " : " M " , " birthdate " : " 1997-01-01T00:00:00.000000Z " , " affiliation " : " CHILD " , " bonus_amount " : " 65000.00 " ,
* " insurance_coverage_amount " : " 0.00 " , " birthdate_proof " : " CERTIFICATE " , " birthdate_proof_doc " : " NH-e451b9e3-a02b-4f84-b74a-d0028cc814b0.jpg " , " justice_doc " : null , " marriage_certificate_doc " : null , " id_document_type " : null , " id_document_front " : null , " id_document_back " : null ,
* " profile_image " : null , " created_at " : " 2021-12-01T11:12:27.000000Z " , " updated_at " : " 2021-12-01T11:12:27.000000Z " , " laravel_through_key " : 13 , " insurance_consumed_amount " : " 0 FCFA " , " insurance_remaining_amount " : " 500 \ u202f000 FCFA " , " affiliation_tr " : " ENFANT " }},
* " months_grid " : { " id " : 77 , " nh_network_config_id " : 1 , " number_of_months " : 12 , " min_amount " : 35040 , " max_insurance_coverage_amount " : " 500000.00 " , " waiting_period_days " : null , " payment_period " : " ONE_TIME " , " payment_duration_months " : null , " number_of_fractions " : 1 ,
* " created_at " : " 2022-03-28T22:23:12.000000Z " , " updated_at " : " 2022-03-28T22:23:12.000000Z " }}},
2021-11-15 15:01:54 +00:00
* " error " : null
* }
* )
* )
* )
*/
2021-11-15 15:59:42 +00:00
public function getInsured ( Request $request )
2021-11-15 15:01:54 +00:00
{
2022-01-18 11:00:05 +00:00
$insured_id = $request -> input ( 'insured_id' );
2021-11-15 15:01:54 +00:00
$name = $request -> input ( 'name' );
$phone = $request -> input ( 'phone' );
2021-11-19 16:07:42 +00:00
$network_id = $request -> input ( 'network_id' );
2022-03-28 23:49:57 +00:00
$network = Network :: find ( $network_id );
if ( ! isset ( $network )) {
return $this -> errorResponse ( trans ( 'errors.network_not_found' ));
}
$currency_code = $network -> country -> currency_code ;
$datetime = $this -> getCurrentTimeByCountryCode ( $network -> country -> code_country );
2021-11-15 15:01:54 +00:00
2022-05-10 07:33:23 +00:00
$q = NhInsurance :: with ([ 'user:id,firstname,lastname,phone,email' , 'user.identification:firstname,lastname,user_image,document_image_front,document_image_back,id_user' ,
'network:id,name' , 'beneficiaries' , 'nhNetworkConfig' , 'monthsGrid' ]) -> where ( 'network_id' , $network_id )
2022-04-01 16:10:44 +00:00
-> whereIn ( 'state' , [ InsuranceState :: PAID , InsuranceState :: PARTIALLY_PAID , InsuranceState :: SUSPENDED ]) -> where ( 'start_at' , '<=' , $datetime );
2021-11-15 15:01:54 +00:00
2022-01-18 11:00:05 +00:00
if ( ! empty ( $insured_id )) {
$q = $q -> where ( 'insured_id' , $insured_id );
}
2022-01-03 16:36:06 +00:00
if ( ! empty ( $name )) {
$q = $q -> whereHas ( 'user' , function ( $query ) use ( $name ) {
return $query -> where ( 'lastname' , 'like' , '%' . $name . '%' ) -> orWhere ( 'firstname' , 'like' , '%' . $name . '%' );
});
}
if ( ! empty ( $phone )) {
$q = $q -> whereHas ( 'user' , function ( $query ) use ( $phone ) {
return $query -> where ( 'phone' , 'like' , '%' . $phone . '%' );
});
}
$insured = $q -> get ();
2022-02-28 14:53:07 +00:00
foreach ( $insured as $i ) {
2022-03-28 23:49:57 +00:00
$monthPrice = $i -> monthsGrid ;
2022-02-28 14:53:07 +00:00
$i -> insurance_consumed_amount = $this -> toMoneyWithCurrencyCode ( $i -> insurance_coverage_amount , $currency_code );
$i -> insurance_remaining_amount = $this -> toMoneyWithCurrencyCode (( $monthPrice -> max_insurance_coverage_amount ? ? 0 ) - $i -> insurance_coverage_amount , $currency_code );
foreach ( $i -> beneficiaries as $b ) {
$b -> insurance_consumed_amount = $this -> toMoneyWithCurrencyCode ( $b -> insurance_coverage_amount , $currency_code );
$b -> insurance_remaining_amount = $this -> toMoneyWithCurrencyCode (( $monthPrice -> max_insurance_coverage_amount ? ? 0 ) - $b -> insurance_coverage_amount , $currency_code );
}
unset ( $i -> nhNetworkConfig );
}
2021-11-15 15:01:54 +00:00
return $this -> successResponse ( $insured );
}
}