first commit

This commit is contained in:
2026-01-13 20:57:58 -06:00
commit afd9118d1e
239 changed files with 49001 additions and 0 deletions

View File

@@ -0,0 +1,219 @@
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Verify_accounts;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Socialite;
use Route;
use Config;
class AuthController extends Controller
{
public function login(Request $request) {
$request->validate([
'email' => 'required|string|email',
'password' => 'required|string',
//'remember_me' => 'boolean'
]);
$credentials = request(['email', 'password']);
if(!Auth::attempt($credentials))
return response()->json([
'message' => 'Unauthorized'
], 401);
$user = $request->user();
$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->token;
if ($request->remember_me)
$token->expires_at = Carbon::now()->addWeeks(1);
$token->save();
return response()->json([
'access_token' => $tokenResult->accessToken,
'token_type' => 'Bearer',
'expires_at' => Carbon::parse(
$tokenResult->token->expires_at
)->toDateTimeString(),
'userid' => $user->id,
'role' => $user->role_id,
'verified' => $user->phone_verified_at,
'reported' => $user->reported
]);
}
public function fb(Request $request)
{
$params = [
'grant_type' => 'social',
'client_id' => '2', // it should be password grant client
'client_secret' => config('app.secret'),
'provider' => 'facebook',
'access_token' => $request->access_token // access token from provider
];
$requestToken = Request::create("/oauth/token", "POST", $params);
$response = app()->handle($requestToken);
$json = json_decode($response->content(), true);
$user = User::where('social_id', $request->social_id) -> first();
$frontend = json_encode([
'token_type' => $json['token_type'],
'expires_at' => $json['expires_in'],
'access_token' => $json['access_token'],
'userid' => $user->id,
'role' => $user->role_id,
'verified' => $user->phone_verified_at,
'reported' => $user->reported
]);
return $frontend;
}
public function google(Request $request)
{
$params = [
'grant_type' => 'social',
'client_id' => '2', // it should be password grant client
'client_secret' => config('app.secret'),
'provider' => 'google',
'access_token' => $request->access_token // access token from provider
];
$requestToken = Request::create("/oauth/token", "POST", $params);
$response = app()->handle($requestToken);
$json = json_decode($response->content(), true);
$user = User::where('social_id', $request->social_id) -> first();
$frontend = json_encode([
'token_type' => $json['token_type'],
'expires_at' => $json['expires_in'],
'access_token' => $json['access_token'],
'userid' => $user->id,
'role' => $user->role_id,
'verified' => $user->phone_verified_at,
'reported' => $user->reported
]);
return $frontend;
}
public function apple(Request $request)
{
$params = [
'grant_type' => 'social',
'client_id' => '2', // it should be password grant client
'client_secret' => config('app.secret'),
'provider' => 'apple',
'access_token' => $request->access_token // access token from provider
];
$requestToken = Request::create("/oauth/token", "POST", $params);
$response = app()->handle($requestToken);
$json = json_decode($response->content(), true);
$user = User::where('social_id', $request->social_id) -> first();
$frontend = json_encode([
'token_type' => $json['token_type'],
'expires_at' => $json['expires_in'],
'access_token' => $json['access_token'],
'userid' => $user->id,
'role' => $user->role_id,
'verified' => $user->phone_verified_at,
'reported' => $user->reported
]);
return $frontend;
}
public function register(Request $request)
{
$rules = [
'name' => 'required|string|regex:/(^[a-zA-Z\s ÑñÁáÉéÍíÓóÚúÜü]+$)+/',
'email' => 'required|string|email|unique:users',
'phone' => 'required|numeric',
'password' => 'required|string',
'secret' => 'required|string'
];
$messages = [
'email.unique' => 'Correo electronico ya registrado',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return response()->json([
'message' => $validator->messages()->first()
], 422);
}
if ($request->secret == config('app.pass')) {
/**$verify = new Verify_accounts;
$verify->name = $request->name;
$verify->email = $request->email;
$verify->password = bcrypt($request->password);
$verify->token = str_random(70);
$verify->save(); */
$user = new User;
$user->name = $request->name;
$user->email = $request->email;
$user->phone = $request->phone;
$user->password = bcrypt($request->password);
$user->role_id = "1";
$user->save();
return response()->json([
'message' => 'Successfully created user!'
], 201);
} else {
return response()->json([
'message' => 'Puto el que la hackee'
], 201);
}
}
public function logout(Request $request)
{
$request->user()->token()->revoke();
return response()->json([
'message' => 'Successfully logged out'
]);
}
/**
* Get the authenticated User
*
* @return [json] user object
*/
public function user(Request $request)
{
return response()->json($request->user());
}
public function checkemail($token)
{
$verifyUser = Verify_accounts::where('token', $token)->first();
$user = new User;
$user->name = $verifyUser->name;
$user->email = $verifyUser->email;
$user->password = $verifyUser->password;
$user->role_id = "1";
$user->save();
Verify_accounts::destroy($verifyUser->id);
}
public function verify(Request $request)
{
$user = $request->user();
$user->phone = $request->phone;
$user->phone_verified_at = date("Y-m-d H:i:s");
$user->save();
return response()->json([
'message' => 'Successfully updated'
]);
}
}

View File

@@ -0,0 +1,51 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
protected function sendResetLinkResponse($response)
{
if (request()->header('Content-Type') == 'application/json') {
return response()->json(['success' => 'Email enviado con éxito.']);
}
return back()->with('status', 'Email enviado con éxito.');
}
protected function sendResetLinkFailedResponse($response)
{
if (request()->header('Content-Type') == 'application/json') {
return response()->json(['error' => 'Por favor contacte a soporte técnico.']);
}
return back()->withErrors(
['email' => 'Ha ocurrido un error']
);
}
}

View File

@@ -0,0 +1,71 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Auth;
use Socialite;
use Route;
use App\User;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function redirectToProvider($provider)
{
return Socialite::driver($provider)->redirect();
}
public function handleProviderCallback($provider)
{
$user = Socialite::driver($provider)->user();
$authUser = $this->findUser($user, $provider);
Auth::login($authUser, true);
return redirect($this->redirectTo);
}
public function findUser($user, $provider) {
$authUser = User::where('social_id', $user->id . '_' . $provider)->first();
if($authUser) {
return $authUser;
}
return User::create([
'name' => $user->getName(),
'email' => $user->getEmail(),
'social_id' => $user->getId() . '_' . $provider,
]);
}
}

View File

@@ -0,0 +1,77 @@
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use Carbon\Carbon;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'phone' => ['required', 'string', 'min:8', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'phone' => $data['phone'],
'phone_verified_at' => Carbon::now(),
'role_id' => '2',
'password' => Hash::make($data['password']),
]);
}
}

View File

@@ -0,0 +1,39 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset requests
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
*/
use ResetsPasswords;
/**
* Where to redirect users after resetting their password.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
{
/*
|--------------------------------------------------------------------------
| Email Verification Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling email verification for any
| user that recently registered with the application. Emails may also
| be re-sent if the user didn't receive the original email message.
|
*/
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
}

View File

@@ -0,0 +1,162 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Banks;
use Illuminate\Support\Facades\Validator;
class BanksController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$banks = new Banks();
$banks = $banks->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('code', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('name', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->ajax()) {
return view('banks.index', compact('banks'));
} else {
return view('banks.ajax', compact('banks'));
}
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request)
{
//
if ($request->isMethod('get'))
return view('banks.form');
$rules = [
'code' => 'required|numeric',
'name' => 'required|string',
];
$messages = [
'code.required' => 'Se requiere un valor de código',
'name.required' => 'Se requiere el nombre del banco',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$bank = new Banks();
$bank->code = $request->code;
$bank->name = strip_tags($request->name);
$bank->save();
return redirect('banks');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
if ($request->isMethod('get'))
return view('banks.form',['bank' => Banks::find($id)]);
$rules = [
'code' => 'required|numeric',
'name' => 'required|string',
];
$messages = [
'code.required' => 'Se requiere un valor de código',
'name.required' => 'Se requiere el nombre del banco',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$bank = Banks::find($id);
$bank->code = $request->code;
$bank->name = strip_tags($request->name);
$bank->save();
return redirect('banks');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Banks::destroy($id);
return redirect('banks');
}
}

View File

@@ -0,0 +1,161 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Categories;
use Illuminate\Support\Facades\Validator;
class CategoriesController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$categories = new Categories();
$categories = $categories->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('name', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->ajax()) {
return view('categories.index', compact('categories'));
} else {
return view('categories.ajax', compact('categories'));
}
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request)
{
//
if ($request->isMethod('get'))
return view('categories.form');
$rules = [
'name' => 'required|string',
'en_name' => 'required|string',
];
$messages = [
'name.required' => 'Se requiere el nombre de la categoría',
'en_name.required' => 'Se requiere el nombre de la categoría (en ingles)',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$category = new Categories();
$category->name = strip_tags($request->name);
$category->en_name = strip_tags($request->en_name);
$category->save();
return redirect('categories');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
if ($request->isMethod('get'))
return view('categories.form',['category' => Categories::find($id)]);
$rules = [
'name' => 'required|string',
'en_name' => 'required|string',
];
$messages = [
'name.required' => 'Se requiere el nombre de la categoría',
'en_name.required' => 'Se requiere el nombre de la categoría (en ingles)',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$category = Categories::find($id);
$category->name = strip_tags($request->name);
$category->en_name = strip_tags($request->en_name);
$category->save();
return redirect('categories');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Categories::destroy($id);
return redirect('categories');
}
}

View File

@@ -0,0 +1,994 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Carbon\Carbon;
use OneSignal;
use Openpay;
use Exception;
use OpenpayApiError;
use OpenpayApiAuthError;
use OpenpayApiRequestError;
use OpenpayApiConnectionError;
use OpenpayApiTransactionError;
use App\iChambaParameter;
use App\Models\Suppliers;
use App\Models\Categories;
use App\Models\Cards;
use App\Models\Postulations;
use App\Models\CurrentContracts;
use App\Models\FinishedContracts;
use App\Models\Status;
use App\Models\Payments;
use App\Models\Coupon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Grimzy\LaravelMysqlSpatial\Types\Point;
class ContractController extends Controller
{
//
public function currentcontracts(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$currentcontracts = new CurrentContracts();
$currentcontracts = $currentcontracts->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('user_id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('address', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('amount', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->ajax()) {
return view('currentcontracts.index', compact('currentcontracts'));
} else {
return view('currentcontracts.ajax', compact('currentcontracts'));
}
}
public function mapcurrentcontracts(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$currentcontracts = new CurrentContracts();
$currentcontracts = $currentcontracts->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('user_id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('address', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('amount', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
return view('currentcontracts.map', compact('currentcontracts'));
}
public function finishedcontracts(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$finishedcontracts = new FinishedContracts();
$finishedcontracts = $finishedcontracts->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('user_id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('address', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('amount', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->ajax()) {
return view('finishedcontracts.index', compact('finishedcontracts'));
} else {
return view('finishedcontracts.ajax', compact('finishedcontracts'));
}
}
public function mapfinishedcontracts(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$finishedcontracts = new FinishedContracts();
$finishedcontracts = $finishedcontracts->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('user_id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('address', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('amount', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
return view('finishedcontracts.map', compact('finishedcontracts'));
}
public function create(Request $request) {
$rules = [
'postulation_id' => 'required|numeric',
'supplier_id' => 'required|numeric',
'card_id' => 'required|numeric',
'code' => 'required|numeric',
'device_id' => 'required|string|regex:/(^[A-Za-z0-9 ]+$)+/',
'coupon' => 'nullable|string|regex:/(^[A-Za-z0-9 ]+$)+/',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
} else {
$user = Auth::user();
$postulation = Postulations::where('id', $request->postulation_id)->first();
$coupon = Coupon::where('name', $request->coupon)->first();
Openpay::setProductionMode(true);
if ($user->id == $postulation->user_id) {
if ($request->card_id) {
$card = Cards::where('id', $request->card_id)->first();
}
$supplier = Suppliers::where('id', $request->supplier_id)->first();
$IVA = iChambaParameter::where('id', $supplier->IVA_id)->first();
$ISR = iChambaParameter::where('id', $supplier->ISR_id)->first();
$ichambafee = iChambaParameter::where('parameter', 'ichamba_fee')->first();
$category = Categories::where('id', $postulation->category_id)->first();
if ($card->user_id == $user->id) {
$contract = new CurrentContracts();
$contract->user_id = $postulation->user_id;
$contract->supplier_id = $supplier->id;
$contract->category_id = $postulation->category_id;
$contract->address = $postulation->address;
$contract->location = $postulation->location;
if (isset($postulation->int_number)) {
$contract->int_number = $postulation->int_number;
} else {
$contract->int_number = 0;
}
$contract->references = $postulation->references;
$contract->appointment = $postulation->appointment;
$contract->amount = ($supplier->minimun_fee < 150 ? 150 : $supplier->minimun_fee);
if (isset($IVA->num_value) && isset($IVA->num_value)) {
$contract->IVA = $IVA->num_value;
$contract->ISR = $ISR->num_value;
$contract->revenue = ((($supplier->minimun_fee < 150 ? 150 : $supplier->minimun_fee) * ((100 - $ichambafee->num_value) / 100)) * ((100 - $IVA->num_value - $ISR->num_value) / 100));
} else {
$contract->IVA = 0;
$contract->ISR = 0;
$contract->revenue = (($supplier->minimun_fee < 150 ? 150 : $supplier->minimun_fee) * ((100 - $ichambafee->num_value) / 100));
}
$contract->ichamba_fee = $ichambafee->num_value;
$contract->details = $postulation->details;
$contract->en = $postulation->en;
if ($coupon) {
$checkccontracts = CurrentContracts::where('coupon_id', $coupon->id)->where('user_id', $user->id)->first();
$checkfcontracts = FinishedContracts::where('coupon_id', $coupon->id)->where('user_id', $user->id)->first();
if ($coupon->limit > 0) {
if(!isset($checkccontracts) && !isset($checkccontracts)) {
$fee = ($supplier->minimun_fee < 150 ? 150 : $supplier->minimun_fee);
$discount = (($fee*(($coupon->percentage = null ? 0 : $coupon->percentage)/100))+($coupon->amount = null ? 0 : $coupon->amount));
$contract->coupon_id = $coupon->id;
$chargeData = array(
'source_id' => $card->token,
'method' => 'card',
'amount' => ((($supplier->minimun_fee < 150 ? 150 : $supplier->minimun_fee)*(1 - (($coupon->percentage = null ? 0 : $coupon->percentage)/100)))-($coupon->amount = null ? 0 : $coupon->amount)),
'description' => ('Contrato del usuario: ' . $user->name . ' del servicio ' . $category->name . ' realizado por el proveedor: ' . $supplier->company_name),
'device_session_id' => $request->device_id,
'cvv2' => $request->code
);
}
}
} else {
$fee = ($supplier->minimun_fee < 150 ? 150 : $supplier->minimun_fee);
$discount = 0;
$contract->coupon_id = null;
$chargeData = array(
'source_id' => $card->token,
'method' => 'card',
'amount' => ($supplier->minimun_fee < 150 ? 150 : $supplier->minimun_fee),
'description' => ('Contrato del usuario: ' . $user->name . ' del servicio ' . $category->name . ' realizado por el proveedor: ' . $supplier->company_name),
'device_session_id' => $request->device_id,
'cvv2' => $request->code
);
}
if (!empty($request->card_id) && !empty($request->device_id) && !empty($request->code) && $fee > $discount) {
try {
$openpay = Openpay::getInstance(config('app.openpay_id'), config('app.openpay_apikey'));
$customer = $openpay->customers->get($user->openpay_id);
$charge = $customer->charges->create($chargeData);
} catch (OpenpayApiTransactionError $e) {
return response()->json([
'type' => 'error',
'message' => 'No se pudo procesar la transacción'
]);
} catch (OpenpayApiRequestError $e) {
return response()->json([
'type' => 'error',
'message' => 'No se pudo procesar la operación'
]);
} catch (OpenpayApiConnectionError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay:' . $e->getMessage()
]);
} catch (OpenpayApiAuthError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay' . $e->getMessage()
]);
} catch (OpenpayApiError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay' . $e->getMessage()
]);
} catch (Exception $e) {
return response()->json([
'type' => 'error',
'message' => 'Error: ' . $e->getMessage()
]);
}
$contract->transaction_id = $charge->id;
} else if ($coupon) {
if ($coupon->limit > 0 && $discount >= $fee) {
if(!isset($checkccontracts) && !isset($checkccontracts)) {
$coupon->limit = $coupon->limit - 1;
$coupon->save();
$contract->transaction_id = $coupon->name;
}
}
}
$contract->status_id = 1;
$contract->code = mt_rand(100000, 999999);
$contract->save();
$delay_UTC = Carbon::parse($contract->appointment)->subMinutes(30)->toString();
Postulations::destroy($request->postulation_id);
OneSignal::sendNotificationUsingTags(
"Dirígete a la sección de postulaciones contratadas en la app para ver más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $supplier->user_id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = null,
$headings = "Proveedor: has sido contratado"
);
//Schedule a notification for the supplier about its appointment
OneSignal::sendNotificationUsingTags(
"Tienes un servicio en " . $contract->address . " hoy en 30 minutos. Dírigeta a la sección de postulaciones contratados para más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $supplier->user_id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = $delay_UTC,
$headings = "Proveedor, no olvides tu cita de hoy"
);
//Schedule a notification for the user about its appointment
OneSignal::sendNotificationUsingTags(
"Tienes un servicio agendado hoy en " . $contract->address . " en 30 minutos. Dírigeta a la sección de contratos confirmados para más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $user->id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = $delay_UTC,
$headings = $user->name . ", no olvides tu cita de hoy"
);
return response()->json([
'message' => 'Servicio contratado exitosamente'
]);
}
}
}
}
public function coupon(Request $request) {
$rules = [
'postulation_id' => 'required|numeric',
'supplier_id' => 'required|numeric',
'coupon' => 'required|string|regex:/(^[A-Za-z0-9 ]+$)+/',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
} else {
$user = Auth::user();
$postulation = Postulations::where('id', $request->postulation_id)->first();
$coupon = Coupon::where('name', $request->coupon)->first();
if($coupon) {
if ($user->id == $postulation->user_id) {
$supplier = Suppliers::where('id', $request->supplier_id)->first();
$IVA = iChambaParameter::where('id', $supplier->IVA_id)->first();
$ISR = iChambaParameter::where('id', $supplier->ISR_id)->first();
$ichambafee = iChambaParameter::where('parameter', 'ichamba_fee')->first();
$category = Categories::where('id', $postulation->category_id)->first();
$checkccontracts = CurrentContracts::where('coupon_id', $coupon->id)->where('user_id', $user->id)->first();
$checkfcontracts = FinishedContracts::where('coupon_id', $coupon->id)->where('user_id', $user->id)->first();
if (!isset($checkccontracts) && !isset($checkccontracts)) {
if($coupon->percentage == 100) {
if($coupon->limit > 0) {
$contract = new CurrentContracts();
$contract->user_id = $postulation->user_id;
$contract->supplier_id = $supplier->id;
$contract->category_id = $postulation->category_id;
$contract->address = $postulation->address;
$contract->location = $postulation->location;
if (isset($postulation->int_number)) {
$contract->int_number = $postulation->int_number;
} else {
$contract->int_number = 0;
}
$contract->references = $postulation->references;
$contract->appointment = $postulation->appointment;
$contract->amount = ($supplier->minimun_fee < 150 ? 150 : $supplier->minimun_fee);
if (isset($IVA->num_value) && isset($IVA->num_value)) {
$contract->IVA = $IVA->num_value;
$contract->ISR = $ISR->num_value;
$contract->revenue = ((($supplier->minimun_fee < 150 ? 150 : $supplier->minimun_fee) * ((100 - $ichambafee->num_value) / 100)) * ((100 - $IVA->num_value - $ISR->num_value) / 100));
} else {
$contract->IVA = 0;
$contract->ISR = 0;
$contract->revenue = (($supplier->minimun_fee < 150 ? 150 : $supplier->minimun_fee) * ((100 - $ichambafee->num_value) / 100));
}
$contract->ichamba_fee = $ichambafee->num_value;
$contract->details = $postulation->details;
$contract->en = $postulation->en;
$contract->coupon_id = $coupon->id;
$contract->transaction_id = $coupon->name;
$contract->status_id = 1;
$contract->code = mt_rand(100000, 999999);
$contract->save();
$delay_UTC = Carbon::parse($contract->appointment)->subMinutes(30)->toString();
Postulations::destroy($request->postulation_id);
OneSignal::sendNotificationUsingTags(
"Dirígete a la sección de postulaciones contratadas en la app para ver más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $supplier->user_id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = null,
$headings = "Proveedor: has sido contratado"
);
//Schedule a notification for the supplier about its appointment
OneSignal::sendNotificationUsingTags(
"Tienes un servicio en " . $contract->address . " hoy en 30 minutos. Dírigeta a la sección de postulaciones contratados para más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $supplier->user_id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = $delay_UTC,
$headings = "Proveedor, no olvides tu cita de hoy"
);
//Schedule a notification for the user about its appointment
OneSignal::sendNotificationUsingTags(
"Tienes un servicio agendado hoy en " . $contract->address . " en 30 minutos. Dírigeta a la sección de contratos confirmados para más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $user->id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = $delay_UTC,
$headings = $user->name . ", no olvides tu cita de hoy"
);
$coupon->limit = $coupon->limit - 1;
$coupon->save();
return response()->json([
'name' => 'success'
]);
//
} else {
return response()->json([
'name' => 'expired'
]);
}
} else {
return response()->json($coupon);
}
} else {
return response()->json([
'name' => 'used'
]);
}
}
}
}
}
public function couponextra(Request $request) {
$rules = [
'contract_id' => 'required|numeric',
'amount' => 'required|numeric',
'coupon' => 'required|string|regex:/(^[A-Za-z0-9 ]+$)+/',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
} else {
$user = Auth::user();
$fcontract = FinishedContracts::where('id', $request->contract_id)->first();
$supplier = Suppliers::where('id', $fcontract->supplier_id)->first();
$IVA = iChambaParameter::where('id', $supplier->IVA_id)->first();
$ISR = iChambaParameter::where('id', $supplier->ISR_id)->first();
$ichambafee = iChambaParameter::where('parameter', 'ichamba_fee')->first();
$coupon = Coupon::where('name', $request->coupon)->first();
if($coupon) {
if ($user->id == $fcontract->user_id) {
$checkccontracts = CurrentContracts::where('coupon_id', $coupon->id)->where('user_id', $user->id)->first();
$checkfcontracts = FinishedContracts::where('coupon_id', $coupon->id)->where('user_id', $user->id)->first();
if (!isset($checkccontracts) && !isset($checkccontracts)) {
if($coupon->percentage == 100) {
if($coupon->limit > 0) {
$extra = new FinishedContracts();
$extra->user_id = $fcontract->user_id;
$extra->supplier_id = $fcontract->supplier_id;
$extra->category_id = $fcontract->category_id;
$extra->address = $fcontract->address;
$extra->location = $fcontract->location;
$extra->int_number = $fcontract->int_number;
$extra->references = $fcontract->references;
$extra->appointment = Carbon::now();
$extra->amount = ($request->amount < 150 ? 150 : $request->amount);
if (isset($IVA->num_value) && isset($IVA->num_value)) {
$extra->IVA = $IVA->num_value;
$extra->ISR = $ISR->num_value;
$extra->revenue = ((($request->amount < 150 ? 150 : $request->amount) * ((100 - $ichambafee->num_value) / 100)) * ((100 - $IVA->num_value - $ISR->num_value) / 100));
} else {
$extra->IVA = 0;
$extra->ISR = 0;
$extra->revenue = (($request->amount < 150 ? 150 : $request->amount) * ((100 - $ichambafee->num_value) / 100));
}
$extra->ichamba_fee = $ichambafee->num_value;
$extra->en = $fcontract->en;
$extra->coupon_id = $coupon->id;
$extra->transaction_id = $coupon->name;
$extra->status_id = 3;
$extra->parent_contract_id = $fcontract->id;
$extra->save();
$coupon->limit = $coupon->limit - 1;
$coupon->save();
return response()->json([
'name' => 'success'
]);
} else {
return response()->json([
'name' => 'expired'
]);
}
} else {
return response()->json($coupon);
}
} else {
return response()->json([
'name' => 'used'
]);
}
}
}
}
}
public function getcurrentcontracts(Request $request) {
$user = Auth::user();
$ccontracts = CurrentContracts::where('user_id', $user->id)->orderBy('created_at', 'DESC')->get();
$currentcontracts = array();
foreach($ccontracts as $ccontract) {
$category = Categories::where('id', $ccontract->category_id)->first();
$supplier = Suppliers::where('id', $ccontract->supplier_id)->first();
$time_limit = Carbon::parse($ccontract->appointment);
$day_limit = Carbon::parse($ccontract->created_at);
$currentcontractinfo = array(
'id' => $ccontract->id,
'phone' => $supplier->user->phone,
'category' => $category->name,
'en_category' => $category->en_name,
'address' => $ccontract->address,
'date' => $ccontract->appointment,
'supplier' => $supplier->company_name,
'status' => $ccontract->status_id,
'amount' => $ccontract->amount,
'code' => $ccontract->code,
'rescheadulable' => $day_limit->diffInDays($time_limit),
'time_limit' => $time_limit->diffInMinutes(Carbon::now()),
'past_due' => $time_limit->diffInHours(Carbon::now(), false)
);
$currentcontracts[] = $currentcontractinfo;
}
return response()->json($currentcontracts);
}
public function cancelcontract(Request $request) {
$rules = [
'contract_id' => 'required|numeric',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
} else {
$user = Auth::user();
$ccontract = CurrentContracts::where('id', $request->contract_id)->first();
$supplier = Suppliers::where('id', $ccontract->supplier_id)->first();
if ($user->id == $ccontract->user_id) {
$time_limit = Carbon::parse($ccontract->appointment);
if ($time_limit->diffInHours(Carbon::now()) >= 24) {
if($ccontract->transaction_id != 'NO APPLY') {
try {
$openpay = Openpay::getInstance(config('app.openpay_id'), config('app.openpay_apikey'));
$refundData = array(
'description' => 'Reembolso del contrato con id: ' . $ccontract->id . ', del usuario ' . $user->name . '. Con proveedor: ' . $supplier->id,
);
$customer = $openpay->customers->get($user->openpay_id);
$charge = $customer->charges->get($ccontract->transaction_id);
$charge->refund($refundData);
} catch (OpenpayApiTransactionError $e) {
return response()->json([
'type' => 'error',
'message' => 'No se pudo procesar la transacción'
]);
} catch (OpenpayApiRequestError $e) {
return response()->json([
'type' => 'error',
'message' => 'No se pudo procesar la operación'
]);
} catch (OpenpayApiConnectionError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay:' . $e->getMessage()
]);
} catch (OpenpayApiAuthError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay' . $e->getMessage()
]);
} catch (OpenpayApiError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay' . $e->getMessage()
]);
} catch (Exception $e) {
return response()->json([
'type' => 'error',
'message' => 'Error: ' . $e->getMessage()
]);
}
}
}
$fcontract = new FinishedContracts();
$fcontract->user_id = $ccontract->user_id;
$fcontract->supplier_id = $ccontract->supplier_id;
$fcontract->category_id = $ccontract->category_id;
$fcontract->address = $ccontract->address;
$fcontract->location = $ccontract->location;
$fcontract->int_number = $ccontract->int_number;
$fcontract->references = $ccontract->references;
$fcontract->appointment = $ccontract->appointment;
$fcontract->amount = $ccontract->amount;
$fcontract->IVA = $ccontract->IVA;
$fcontract->ISR = $ccontract->ISR;
$fcontract->ichamba_fee = $ccontract->ichamba_fee;
$fcontract->revenue = $ccontract->revenue;
$fcontract->details = $ccontract->details;
$fcontract->en = $ccontract->en;
$fcontract->transaction_id = (!empty($charge->id) ? $charge->id : $ccontract->transaction_id);
$fcontract->status_id = 4;
$fcontract->save();
CurrentContracts::destroy($request->contract_id);
OneSignal::sendNotificationUsingTags(
"El servicio en " . $fcontract->address . " el día " . substr($fcontract->appointment, 0, 10) . "ha sido cancelado. Dírigeta a la sección de servicios contratados para más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $supplier->user_id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = null,
$headings = "Proveedor: un servicio ha sido cancelado"
);
return response()->json([
'message' => 'Servicio cancelado exitosamente'
]);
}
}
}
public function startcontract(Request $request) {
$rules = [
'contract_pin' => 'required|numeric',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
} else {
$user = Auth::user();
$supplier = $user->suppliers;
$ccontract = CurrentContracts::where('code', $request->contract_pin)->where('supplier_id', $supplier->id)->first();
if($ccontract) {
$time_limit = Carbon::parse($ccontract->appointment);
if ($time_limit->diffInMinutes(Carbon::now()) <= 120) {
$fcontract = new FinishedContracts();
$fcontract->user_id = $ccontract->user_id;
$fcontract->supplier_id = $ccontract->supplier_id;
$fcontract->category_id = $ccontract->category_id;
$fcontract->address = $ccontract->address;
$fcontract->location = $ccontract->location;
$fcontract->int_number = $ccontract->int_number;
$fcontract->references = $ccontract->references;
$fcontract->appointment = $ccontract->appointment;
$fcontract->amount = $ccontract->amount;
$fcontract->IVA = $ccontract->IVA;
$fcontract->ISR = $ccontract->ISR;
$fcontract->ichamba_fee = $ccontract->ichamba_fee;
$fcontract->revenue = $ccontract->revenue;
$fcontract->details = $ccontract->details;
$fcontract->en = $ccontract->en;
$fcontract->coupon_id = $ccontract->coupon_id;
$fcontract->transaction_id = $ccontract->transaction_id;
$fcontract->status_id = 3;
$fcontract->score = 5;
$fcontract->save();
$supplier->total_score = ($supplier->total_score + 5);
$supplier->finished_jobs = ($supplier->finished_jobs + 1);
$supplier->save();
CurrentContracts::destroy($ccontract->id);
$payment = new Payments();
$payment->contract_id = $fcontract->id;
$payment->supplier_id = $fcontract->supplier_id;
$payment->amount = $fcontract->amount;
$payment->status_id = null;
$payment->save();
OneSignal::sendNotificationUsingTags(
"El servicio en " . $fcontract->address . " el día " . substr($fcontract->appointment, 0, 10) . " ha sido iniciado. Dírigeta a la sección de servicios contratados para más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $fcontract->user_id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = null,
$headings = "Usuario: el proveedor ha iniciado el servicio"
);
return response()->json([
'message' => 'Servicio iniciado exitosamente'
]);
} else {
return response()->json([
'message' => 'No service'
]);
}
} else {
return response()->json([
'message' => 'No service'
]);
}
}
}
public function extra(Request $request) {
$rules = [
'contract_id' => 'required|numeric',
'amount' => 'required|numeric',
'card_id' => 'required|numeric',
'code' => 'required|numeric',
'device_id' => 'required|string|regex:/(^[A-Za-z0-9 ]+$)+/',
'coupon' => 'nullable|string|regex:/(^[A-Za-z0-9 ]+$)+/',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
} else {
$user = Auth::user();
$coupon = Coupon::where('name', $request->coupon)->first();
$fcontract = FinishedContracts::where('id', $request->contract_id)->first();
Openpay::setProductionMode(true);
if ($user->id == $fcontract->user_id) {
$card = Cards::where('id', $request->card_id)->first();
$IVA = iChambaParameter::where('id', $supplier->IVA_id)->first();
$ISR = iChambaParameter::where('id', $supplier->ISR_id)->first();
$ichambafee = iChambaParameter::where('parameter', 'ichamba_add_fee')->first();
$supplier = Suppliers::where('id', $fcontract->supplier_id)->first();
if ($card->user_id == $user->id) {
$openpay = Openpay::getInstance(config('app.openpay_id'), config('app.openpay_apikey'));
}
$extra = new FinishedContracts();
$extra->user_id = $fcontract->user_id;
$extra->supplier_id = $fcontract->supplier_id;
$extra->category_id = $fcontract->category_id;
$extra->address = $fcontract->address;
$extra->location = $fcontract->location;
$extra->int_number = $fcontract->int_number;
$extra->references = $fcontract->references;
$extra->appointment = Carbon::now();
$extra->amount = ($request->amount < 150 ? 150 : $request->amount);
if (isset($IVA->num_value) && isset($IVA->num_value)) {
$extra->IVA = $IVA->num_value;
$extra->ISR = $ISR->num_value;
$extra->revenue = ((($request->amount < 150 ? 150 : $request->amount) * ((100 - $ichambafee->num_value) / 100)) * ((100 - $IVA->num_value - $ISR->num_value) / 100));
} else {
$extra->IVA = 0;
$extra->ISR = 0;
$extra->revenue = (($request->amount < 150 ? 150 : $request->amount) * ((100 - $ichambafee->num_value) / 100));
}
$extra->ichamba_fee = $ichambafee->num_value;
$extra->en = $fcontract->en;
if ($coupon) {
if ($coupon->limit > 0) {
$extra->coupon_id = $coupon->id;
$chargeData = array(
'source_id' => $card->token,
'method' => 'card',
'amount' => ((($request->amount < 150 ? 150 : $request->amount)*(1 - (($coupon->percentage = null ? 0 : $coupon->percentage)/100)))-($coupon->amount = null ? 0 : $coupon->amount)),
'description' => ('Contrato del usuario: ' . $user->name . ' del servicio ' . $category->name . ' realizado por el proveedor: ' . $supplier->company_name),
'device_session_id' => $request->device_id,
'cvv2' => $request->code
);
} else {
$extra->coupon_id = null;
$chargeData = array(
'source_id' => $card->token,
'method' => 'card',
'amount' => ($request->amount < 150 ? 150 : $request->amount),
'description' => ('Contrato del usuario: ' . $user->name . ' del servicio ' . $category->name . ' realizado por el proveedor: ' . $supplier->company_name),
'device_session_id' => $request->device_id,
'cvv2' => $request->code
);
}
} else {
$extra->coupon_id = null;
$chargeData = array(
'source_id' => $card->token,
'method' => 'card',
'amount' => ($request->amount < 150 ? 150 : $request->amount),
'description' => ('Contrato del usuario: ' . $user->name . ' del servicio ' . $category->name . ' realizado por el proveedor: ' . $supplier->company_name),
'device_session_id' => $request->device_id,
'cvv2' => $request->code
);
}
$customer = $openpay->customers->get($user->openpay_id);
$charge = $customer->charges->create($chargeData);
$extra->transaction_id = $charge->id;
$extra->status_id = 3;
$extra->parent_contract_id = $fcontract->id;
$extra->save();
if ($coupon) {
$coupon->limit = $coupon->limit - 1;
$coupon->save();
}
return response()->json([
'message' => 'extra_added'
]);
}
}
}
public function getfinishedcontracts(Request $request) {
$user = Auth::user();
$fcontracts = FinishedContracts::where('user_id', $user->id)->orderBy('created_at', 'DESC')->get();
$finishedcontracts = array();
foreach($fcontracts as $fcontract) {
$category = Categories::where('id', $fcontract->category_id)->first();
$supplier = Suppliers::where('id', $fcontract->supplier_id)->first();
$time_limit = Carbon::parse($fcontract->appointment);
$day_limit = Carbon::parse($fcontract->created_at);
$finishedcontractinfo = array(
'id' => $fcontract->id,
'category' => $category->name,
'en_category' => $category->en_name,
'address' => $fcontract->address,
'date' => $fcontract->appointment,
'date_difference' => $time_limit->diff(Carbon::now(), false)->days,
'supplier' => $supplier->company_name,
'amount' => $fcontract->amount,
'scored' => $fcontract->scored_at,
'parent' => $fcontract->parent_contract_id,
'status' => $fcontract->status->name
);
$finishedcontracts[] = $finishedcontractinfo;
}
return response()->json($finishedcontracts);
}
public function reviewcontract(Request $request) {
$rules = [
'contract_id' => 'required|numeric',
'rate' => 'required|numeric',
'comment' => 'string',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
} else {
$user = Auth::user();
$fcontract = FinishedContracts::where('id', $request->contract_id)->first();
if ($fcontract->user_id == $user->id) {
$fcontract->score = $fcontract->score - (5 - $request->rate);
$fcontract->scored_at = Carbon::now();
$fcontract->comments = strip_tags($request->comment);
$fcontract->save();
$supplier = Suppliers::where('id', $fcontract->supplier_id)->first();
$supplier->total_score = $supplier->total_score - (5 - $request->rate);
$supplier->save();
}
}
return response()->json([
'message' => 'Calificación registrada con éxito, muchas gracias'
]);
}
public function deletemissed()
{
$contracts = CurrentContracts::whereDate('appointment', '<', Carbon::now())->delete();
}
public function currentdestroy($id)
{
CurrentContracts::destroy($id);
return redirect('currentcontracts');
}
public function finisheddestroy($id)
{
FinishedContracts::destroy($id);
return redirect('finishedcontracts');
}
}

View File

@@ -0,0 +1,13 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

View File

@@ -0,0 +1,170 @@
<?php
namespace App\Http\Controllers;
use App\Models\Coupon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class CouponController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$coupons = new Coupon();
$coupons = $coupons->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('name', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('percentage', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('amount', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('limit', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->ajax()) {
return view('coupons.index', compact('coupons'));
} else {
return view('coupons.ajax', compact('coupons'));
}
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request)
{
//
if ($request->isMethod('get'))
return view('coupons.form');
$rules = [
'name' => 'required|string',
'percentage' => 'nullable|numeric',
'amount' => 'nullable|numeric',
'limit' => 'nullable|numeric',
];
$messages = [
'name.required' => 'Se requiere un nombre de cupon',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$coupon = new Coupon();
$coupon->name = strip_tags($request->name);
$coupon->percentage = $request->percentage;
$coupon->amount = $request->amount;
$coupon->limit = $request->limit;
$coupon->save();
return redirect('coupons');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\Coupon $coupon
* @return \Illuminate\Http\Response
*/
public function show(Coupon $coupon)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Coupon $coupon
* @return \Illuminate\Http\Response
*/
public function edit(Coupon $coupon)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Coupon $coupon
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
if ($request->isMethod('get'))
return view('coupons.form', ['coupon' => Coupon::find($id)]);
$rules = [
'name' => 'required|string',
'percentage' => 'nullable|numeric',
'amount' => 'nullable|numeric',
'limit' => 'nullable|numeric',
];
$messages = [
'name.required' => 'Se requiere un nombre de cupon',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$coupon = Coupon::find($id);
$coupon->name = strip_tags($request->name);
$coupon->percentage = $request->percentage;
$coupon->amount = $request->amount;
$coupon->limit = $request->limit;
$coupon->save();
return redirect('coupons');
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Coupon $coupon
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
Coupon::destroy($id);
return redirect('coupons');
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('home');
}
}

View File

@@ -0,0 +1,179 @@
<?php
namespace App\Http\Controllers;
use App\iChambaParameter;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class IChambaParameterController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$ichambaparameters = new iChambaParameter();
$ichambaparameters = $ichambaparameters->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('parameter', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('num_value', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('string_value', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->ajax()) {
return view('parameters.index', compact('ichambaparameters'));
} else {
return view('parameters.ajax', compact('ichambaparameters'));
}
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request)
{
//
if ($request->isMethod('get'))
return view('parameters.form');
$rules = [
'parameter' => 'required|string',
'num_value' => 'nullable|numeric',
'string_value' => 'nullable|string',
];
$messages = [
'parameter.required' => 'Se requiere un nombre de parametro',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$ichambaparameter = new iChambaParameter();
$ichambaparameter->parameter = strip_tags($request->parameter);
$ichambaparameter->num_value = $request->num_value;
$ichambaparameter->string_value = strip_tags($request->string_value);
$ichambaparameter->save();
return redirect('parameters');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\iChambaParameter $iChambaParameter
* @return \Illuminate\Http\Response
*/
public function show(iChambaParameter $iChambaParameter)
{
//
}
public function parameters()
{
//
$ichambaparameters = new iChambaParameter();
$min_time = $ichambaparameters->where('parameter', 'min_time')->first()->num_value;
$max_time = $ichambaparameters->where('parameter', 'max_time')->first()->num_value;
return response()->json([
'min_time' => $min_time,
'max_time' => $max_time
]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\iChambaParameter $iChambaParameter
* @return \Illuminate\Http\Response
*/
public function edit(iChambaParameter $iChambaParameter)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\iChambaParameter $iChambaParameter
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
if ($request->isMethod('get'))
return view('parameters.form', ['ichambaparameter' => iChambaParameter::find($id)]);
$rules = [
'parameter' => 'required|string',
'num_value' => 'nullable|numeric',
'string_value' => 'nullable|string',
];
$messages = [
'parameter.required' => 'Se requiere un nombre de parametro',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$ichambaparameter = iChambaParameter::find($id);
$ichambaparameter->parameter = strip_tags($request->parameter);
$ichambaparameter->num_value = $request->num_value;
$ichambaparameter->string_value = strip_tags($request->string_value);
$ichambaparameter->save();
return redirect('parameters');
}
/**
* Remove the specified resource from storage.
*
* @param \App\iChambaParameter $iChambaParameter
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
iChambaParameter::destroy($id);
return redirect('parameters');
}
}

View File

@@ -0,0 +1,254 @@
<?php
namespace App\Http\Controllers;
use App\NoHome;
use App\User;
use Carbon\Carbon;
use OneSignal;
use Image;
use Storage;
use App\Models\CurrentContracts;
use App\Models\FinishedContracts;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Grimzy\LaravelMysqlSpatial\Types\Point;
use Illuminate\Support\Facades\File;
class NoHomeController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\NoHome $noHome
* @return \Illuminate\Http\Response
*/
public function show(NoHome $noHome)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\NoHome $noHome
* @return \Illuminate\Http\Response
*/
public function edit(NoHome $noHome)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\NoHome $noHome
* @return \Illuminate\Http\Response
*/
public function update(Request $request, NoHome $noHome)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\NoHome $noHome
* @return \Illuminate\Http\Response
*/
public function destroy(NoHome $noHome)
{
//
}
public function test(Request $request)
{
$rules = [
'contract_id' => 'required|numeric',
'description' => 'required|string',
'lat' => 'numeric|nullable',
'lng' => 'numeric|nullable',
//'house_photo' => 'image|mimes:jpeg,jpg,png|max:2048',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return response()->json([
'message' => 'Por favor corrija'
]);
} else {
$user = Auth::user();
$disk = Storage::disk('gcs');
if ($request->file('house_photo')) {
$name = Carbon::now();
$filename = $name . '.jpg';
$disk->putFileAs('img/users/'. $user->id . '/', $request->file('house_photo'), $filename, 'public');
}
return response()->json([
//'message' => 'Por favor espere a los 10 minutos de tolerancia de la hora acordada'
'contract_id' => $request->contract_id,
'lat' => $request->lat,
'lng' => $request->lng,
]);
}
}
public function nohomecheck(Request $request){
$user = Auth::user();
$contract = CurrentContracts::where('supplier_id', $user->suppliers->id)->whereBetween('appointment', [Carbon::now()->subMinutes(15), Carbon::now()->addMinutes(10)])->first();
if ($contract) {
$client = User::where('id', $contract->user_id)->first();
if (Carbon::now()->diffInMinutes($contract->appointment, false) < 10) {
return response()->json($contract);
} else {
OneSignal::sendNotificationUsingTags(
"El proveedor para el servicio en " . $contract->address . " ha llegado. Dírigeta a la sección de contratos confirmados para más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $client->id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = null,
$headings = $client->name + ", tu proveedor del servicio ha llegado"
);
return response()->json([
//'message' => 'Por favor espere a los 10 minutos de tolerancia de la hora acordada'
'message' => 'wait'
]);
}
} else {
return response()->json([
//'message' => 'No hay contratos citados a esta hora'
'message' => 'no-contract'
]);
}
}
public function nohomeconfirm(Request $request) {
$rules = [
'contract_id' => 'required|numeric',
'description' => 'required|string',
'lat' => 'numeric|nullable',
'lng' => 'numeric|nullable',
//'house_photo' => 'image|mimes:jpeg,jpg,png|max:2048',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
} else {
$user = Auth::user();
$disk = Storage::disk('gcs');
$ccontract = CurrentContracts::where('id', $request->contract_id)->first();
$client = User::where('id', $ccontract->user_id)->first();
if ($user->suppliers->id == $ccontract->supplier_id) {
if (Carbon::now()->diffInMinutes($ccontract->appointment, false) >= 11) {
if ($request->lat != null && $request->lng != null) {
$geometry = new Point($request->lat, $request->lng);
}
$fcontract = new FinishedContracts();
$fcontract->user_id = $ccontract->user_id;
$fcontract->supplier_id = $ccontract->supplier_id;
$fcontract->category_id = $ccontract->category_id;
$fcontract->address = $ccontract->address;
$fcontract->location = $ccontract->location;
$fcontract->int_number = $ccontract->int_number;
$fcontract->references = $ccontract->references;
$fcontract->appointment = $ccontract->appointment;
$fcontract->amount = $ccontract->amount;
$fcontract->details = $ccontract->details;
$fcontract->IVA = $ccontract->IVA;
$fcontract->ISR = $ccontract->ISR;
$fcontract->ichamba_fee = $ccontract->ichamba_fee;
$fcontract->revenue = $ccontract->revenue;
$fcontract->details = $ccontract->details;
$fcontract->en = $ccontract->en;
$fcontract->transaction_id = $ccontract->transaction_id;
$fcontract->status_id = 5;
$fcontract->save();
$nohome = new NoHome();
$nohome->contract_id = $fcontract->id;
if ($geometry != null) {
$nohome->location = $geometry;
}
if ($request->file('house_photo')) {
$disk = Storage::disk('gcs');
$name = Carbon::now();
$filename = $name . '.jpg';
$disk->putFileAs('img/users/'. $user->id . '/', $request->file('house_photo'), $filename, 'public');
$nohome->house_photo = $disk->url('img/users/'. $user->id . '/' . $filename);
}
$nohome->house_description = $request->description;
$nohome->save();
return response()->json([
'message' => 'Ausencia registrada con éxito, nos comunicaremos con usted por correo electrónico en caso de alguna circunstancia'
]);
} else {
OneSignal::sendNotificationUsingTags(
"El proveedor para el servicio en " . $ccontract->address . " ha llegado. Dírigeta a la sección de contratos confirmados para más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $client->id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = null,
$headings = $client->name . ", tu proveedor del servicio ha llegado"
);
return response()->json([
'order' => 'wait',
'message' => 'Por favor espere a los 10 minutos de tolerancia de la hora acordada'
]);
}
}
}
}
}

View File

@@ -0,0 +1,381 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Carbon\Carbon;
use App\User;
use App\Models\Suppliers;
use App\Models\Payments;
use App\Models\FinishedContracts;
use App\Models\Cards;
use Openpay;
use Exception;
use OpenpayApiError;
use OpenpayApiAuthError;
use OpenpayApiRequestError;
use OpenpayApiConnectionError;
use OpenpayApiTransactionError;
require_once '../vendor/autoload.php';
class PaymentController extends Controller
{
//
public function index(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$payments = new FinishedContracts();
$payments = $payments->where('status_id', 3)->where('paid', false)->where('transaction_id', '!=', 'NO APPLY')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->ajax()) {
return view('payments.index', compact('payments'));
} else {
return view('payments.ajax', compact('payments'));
}
}
public function cardsindex(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$cards= new Cards();
$cards = $cards->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('token', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->ajax()) {
return view('cards.index', compact('cards'));
} else {
return view('cards.ajax', compact('cards'));
}
}
public function destroy($id)
{
$credit_card = Cards::where('id', $id)->first();
$user = User::where('id', $credit_card->user_id)->first();
Openpay::setProductionMode(true);
try {
$openpay = Openpay::getInstance(config('app.openpay_id'), config('app.openpay_apikey'));
$customer = $openpay->customers->get($user->openpay_id);
$card = $customer->cards->get($credit_card->token);
$card->delete();
} catch (OpenpayApiTransactionError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error en la transacción'
]);
} catch (OpenpayApiRequestError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error en los datos requeridos'
]);
} catch (OpenpayApiConnectionError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (OpenpayApiAuthError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (OpenpayApiError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (Exception $e) {
return response()->json([
'type' => 'error',
'message' => 'Error: ' . $e->getMessage()
]);
}
Cards::destroy($id);
return redirect('cards');
}
public function addcard(Request $request)
{
$rules = [
'token' => 'required|string|regex:/(^[A-Za-z0-9 ]+$)+/',
'device_id' => 'required|string|regex:/(^[A-Za-z0-9 ]+$)+/',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$user = $request->user();
Openpay::setProductionMode(true);
if ($user->openpay_id == null) {
try {
$openpay = Openpay::getInstance(config('app.openpay_id'), config('app.openpay_apikey'));
$customerData = array(
'external_id' => $user->id,
'name' => $user->name,
'email' => $user->email,
);
$customer = $openpay->customers->add($customerData);
} catch (OpenpayApiTransactionError $e) {
return response()->json([
'type' => 'error',
'message' => 'No se pudo procesar la transacción'
]);
} catch (OpenpayApiRequestError $e) {
return response()->json([
'type' => 'error',
'message' => 'No se pudo procesar la operación'
]);
} catch (OpenpayApiConnectionError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (OpenpayApiAuthError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (OpenpayApiError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (Exception $e) {
return response()->json([
'type' => 'error',
'message' => 'Error: ' . $e->getMessage()
]);
}
$user->openpay_id = $customer->id;
$user->save();
}
$cardDataRequest = array(
'token_id' => $request->token,
'device_session_id' => $request->device_id
);
try {
$openpay = Openpay::getInstance(config('app.openpay_id'), config('app.openpay_apikey'));
$customer = $openpay->customers->get($user->openpay_id);
$card = $customer->cards->add($cardDataRequest);
} catch (OpenpayApiTransactionError $e) {
return response()->json([
'type' => 'error',
'message' => 'No se pudo procesar la transacción'
]);
} catch (OpenpayApiRequestError $e) {
return response()->json([
'type' => 'error',
'message' => 'No se pudo procesar la operación'
]);
} catch (OpenpayApiConnectionError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (OpenpayApiAuthError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (OpenpayApiError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (Exception $e) {
return response()->json([
'type' => 'error',
'message' => 'Error: ' . $e->getMessage()
]);
}
$card = new Cards();
$card->user_id = $user->id;
$card->token = $request->token;
$card->save();
return response()->json([
'message' => 'Tarjeta guardada exitosamente'
]);
}
public function deletecard(Request $request)
{
$rules = [
'card_id' => 'required|numeric',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$user = $request->user();
$credit_card = Cards::where('id', $request->card_id)->first();
Openpay::setProductionMode(true);
if ($credit_card->user_id == $user->id) {
try {
$openpay = Openpay::getInstance(config('app.openpay_id'), config('app.openpay_apikey'));
$customer = $openpay->customers->get($user->openpay_id);
$card = $customer->cards->get($credit_card->token);
$card->delete();
} catch (OpenpayApiTransactionError $e) {
return response()->json([
'type' => 'error',
'message' => 'No se pudo procesar la transacción'
]);
} catch (OpenpayApiRequestError $e) {
return response()->json([
'type' => 'error',
'message' => 'No se pudo procesar la operación'
]);
} catch (OpenpayApiConnectionError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (OpenpayApiAuthError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (OpenpayApiError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (Exception $e) {
return response()->json([
'type' => 'error',
'message' => 'Error: ' . $e->getMessage()
]);
}
Cards::destroy($request->card_id);
return response()->json([
'message' => 'Tarjeta eliminada exitosamente'
]);
}
}
public function getcards(Request $request)
{
$user = $request->user();
Openpay::setProductionMode(true);
if ($user->openpay_id) {
try {
$openpay = Openpay::getInstance(config('app.openpay_id'), config('app.openpay_apikey'));
$customer = $openpay->customers->get($user->openpay_id);
} catch (OpenpayApiTransactionError $e) {
return response()->json([
'type' => 'error',
'message' => 'No se pudo procesar la transacción'
]);
} catch (OpenpayApiRequestError $e) {
return response()->json([
'type' => 'error',
'message' => 'No se pudo procesar la operación'
]);
} catch (OpenpayApiConnectionError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (OpenpayApiAuthError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (OpenpayApiError $e) {
return response()->json([
'type' => 'error',
'message' => 'Error al conectarse a Openpay: ' . $e->getMessage()
]);
} catch (Exception $e) {
return response()->json([
'type' => 'error',
'message' => 'Error: ' . $e->getMessage()
]);
}
$cards = Cards::where('user_id', $user->id)->get();
$cardsinfo = array();
foreach ($cards as $credit_card) {
$card = $customer->cards->get($credit_card->token);
$cardinfo = array(
'id' => $credit_card->id,
'brand' => $card->brand,
'card_number' => $card->card_number,
);
$cardsinfo[] = $cardinfo;
}
return response()->json($cardsinfo);
}
}
}

View File

@@ -0,0 +1,370 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Carbon\Carbon;
use OneSignal;
use App\Models\Suppliers;
use App\Models\Categories;
use App\Models\Postulations;
use App\Models\FinishedContracts;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Grimzy\LaravelMysqlSpatial\Types\Point;
class PostulationController extends Controller
{
//
public function index(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$postulations = new Postulations();
$postulations = $postulations->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('user_id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('address', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('amount', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->ajax()) {
return view('postulations.index', compact('postulations'));
} else {
return view('postulations.ajax', compact('postulations'));
}
}
public function map(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$postulations = new Postulations();
$postulations = $postulations->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('user_id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('address', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('amount', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
return view('postulations.map', compact('postulations'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request) {
$rules = [
'category' => 'required|string',
'address' => 'required|string',
'int_number' => 'numeric|nullable',
'references' => 'string|nullable',
'setdate' => 'required|string',
'sethour' => 'required|string',
'details' => 'string|nullable',
'lat' => 'required|numeric',
'lng' => 'required|numeric',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return response()->json($validator->messages());
} else {
$user = Auth::user();
$geometry = new Point($request->lat, $request->lng);
$category = Categories::where('name', strip_tags($request->category))->orwhere('en_name', strip_tags($request->category))->first();
$distance = 0.5;
$suppliers = Suppliers::distance('location', $geometry, $distance)->get();
if ($suppliers != '[]') {
$postulation = new Postulations();
$postulation->user_id = $user->id;
$postulation->category_id = $category->id;
$postulation->address = strip_tags($request->address);
$postulation->location = $geometry;
$postulation->int_number = $request->int_number;
$postulation->references = preg_replace('/\d+/', '', strip_tags($request->references));
$timeoffset = str_replace("0", "", substr(substr(strip_tags($request->sethour), 23), 0, 3));
$postulation->appointment = Carbon::createFromFormat('Y-m-d H:i:s', (substr(strip_tags($request->setdate), 0, 10) . ' ' . substr(substr(strip_tags($request->sethour), 11), 0, 8)), $timeoffset)->tz('UTC');
$postulation->amount = 5000;
$postulation->details = preg_replace('/\d+/', '', strip_tags($request->details));
$postulation->save();
OneSignal::sendNotificationUsingTags(
"Coméntele al Ing. que hay una postulación",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => "128"]
),
$url = null,
$data = null,
$buttons = null,
$schedule = null,
$headings = "Admin: hay nueva postulación"
);
foreach ($suppliers as $supplier) {
if (in_array($category->id, $supplier->categories->pluck('id')->toArray())) {
OneSignal::sendNotificationUsingTags(
"Dirígete a la sección de postulaciones en la app para ver más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $supplier->user_id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = null,
$headings = "Proveedor: hay nueva postulación"
);
}
}
$minutes = intval(substr(substr($request->setdate, 14), 0, 2) + 15);
$hours = intval(substr(substr($request->setdate, 11), 0, 2) + 1);
if ($minutes > 59) {
if ($hours > 23){
$delay_msg = Carbon::now()->addDays(1)->toDateString() . ' ' . ($hours - 24) . ':' . ($minutes - 60) . substr(substr($request->setdate, 16), 0, 3);
} else {
$delay_msg = substr($request->sethour, 0, 10) . ' ' . $hours . ':' . ($minutes - 60) . substr(substr($request->setdate, 16), 0, 3);
}
} else {
$delay_msg = substr($request->sethour, 0, 10) . ' ' . $hours . ':' . $minutes . substr(substr($request->setdate, 16), 0, 3);
}
$delay_UTC = Carbon::now()->addMinutes(15)->toString();
OneSignal::sendNotificationUsingTags(
"Dirígete a la sección de contratos en la app para ver más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $user->id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = $delay_UTC,
$headings = "Búsqueda Finalizada"
);
return response()->json([
'message' => 'Servicio solicitado, espere a que un proveedor se postule'
]);
} else {
return response()->json([
'message' => 'No Provider'
]);
}
}
}
public function postulate(Request $request) {
$rules = [
'postulation_id' => 'required|numeric',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
} else {
$user = Auth::user();
$postulation = Postulations::where('id', $request->postulation_id)->first();
$time_created = Carbon::parse($postulation->created_at);
$time_limit = (9900 - Carbon::now()->diffInMinutes($time_created));
$supplier = Suppliers::where('user_id', $user->id)->first();
if ($time_limit > 0) {
if (in_array($postulation->category_id, $supplier->categories->pluck('id')->toArray())) {
if($supplier->membership == 1) {
OneSignal::sendNotificationUsingTags(
"Dirígete a la sección de contratos en la app para ver más detalles",
array(
["field" => "tag", "key" => "iChamba_ID", "relation" => "=", "value" => $postulation->user_id]
),
$url = null,
$data = null,
$buttons = null,
$schedule = null,
$headings = "Un proveedor certificado se ha postulado"
);
}
$supplier->postulations()->attach($request->postulation_id);
$supplier->save();
return response()->json([
'message' => 'Se ha postulado al servicio exitosamente'
]);
}
} else {
return response()->json([
'message' => 'La postulación ha caducado'
]);
}
}
}
public function getpendingcontracts(Request $request) {
$user = Auth::user();
$postulations = Postulations::where('user_id', $user->id)->orderBy('created_at', 'DESC')->get();
$pendingcontracts = array();
foreach($postulations as $postulation) {
$time_limit = Carbon::parse($postulation->appointment);
if ($time_limit->diffInMinutes(Carbon::now(), false) <= -60) {
$category = Categories::where('id', $postulation->category_id)->first();
$pendingcontractinfo = array(
'id' => $postulation->id,
'category' => $category->name,
'en_category' => $category->en_name,
'address' => $postulation->address,
'date' => $postulation->appointment,
'amount' => $postulation->amount
);
$pendingcontracts[] = $pendingcontractinfo;
}
}
return response()->json($pendingcontracts);
}
public function getfinishedpostulations(Request $request) {
$user = Auth::user();
$postulations = FinishedContracts::where('supplier_id', $user->suppliers->id)->orderBy('created_at', 'DESC')->get();
$finishedpostulations = array();
foreach($postulations as $postulation) {
$time_limit = Carbon::parse($postulation->appointment);
$category = Categories::where('id', $postulation->category_id)->first();
$finishedpostulationinfo = array(
'id' => $postulation->id,
'category' => $category->name,
'en_category' => $category->en_name,
'address' => $postulation->address,
'date' => $postulation->appointment,
'amount' => $postulation->amount
);
$finishedpostulations[] = $finishedpostulationinfo;
}
return response()->json($finishedpostulations);
}
public function getpostulants(Request $request) {
$rules = [
'postulation_id' => 'required|numeric',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
} else {
$user = Auth::user();
$postulation = Postulations::where('id', $request->postulation_id)->first();
if ($postulation->user_id == $user->id) {
$category = Categories::where('id', $postulation->category_id)->first();
$suppliers = Suppliers::whereHas('postulations', function($q) use ($request) {
$q->where('postulations_id', $request->postulation_id);
})->get();
$pcontractsuppliers = array();
if ($suppliers != '[]') {
foreach($suppliers as $supplier) {
$pcontractsupplier = array(
'id' => $postulation->id,
'category' => $category->name,
'en_category' => $category->en_name,
'address' => $postulation->address,
'date' => $postulation->appointment,
'amount' => $postulation->amount,
'supplier_id' => $supplier->id,
'supplier' => $supplier->company_name,
'tags' => $supplier->tags,
'cover_photo' => $supplier->cover_photo,
'membership' => $supplier->membership,
'fee' => $supplier->minimun_fee,
'score' => round($supplier->total_score/$supplier->finished_jobs, 1),
);
$pcontractsuppliers[] = $pcontractsupplier;
}
$pcontractsuppliercollection = collect($pcontractsuppliers)->sortByDesc('membership')->sortByDesc('score');
$pcontractsupplier = $pcontractsuppliercollection->values()->all();
} else {
$pcontractsupplier = array(
'id' => $postulation->id,
'category' => $category->name,
'en_category' => $category->en_name,
'address' => $postulation->address,
'date' => $postulation->appointment,
'amount' => $postulation->amount,
'supplier_id' => null,
'supplier' => null,
'tags' => null,
'cover_photo' => null,
'membership' => null,
'fee' => null,
'score' => null,
);
$pcontractsuppliers[] = $pcontractsupplier;
$pcontractsupplier = $pcontractsuppliers;
}
return response()->json($pcontractsupplier);
}
}
}
public function deleteexpired()
{
$postulations = Postulations::whereDate('appointment', '<', Carbon::now())->delete();
}
public function destroy($id)
{
Postulations::destroy($id);
return redirect('postulations');
}
}

View File

@@ -0,0 +1,112 @@
<?php
namespace App\Http\Controllers;
use App\ReportComment;
use App\Models\FinishedContracts;
use App\NoHome;
use Illuminate\Http\Request;
class ReportCommentController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request, $id, $contract_id)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$contract = FinishedContracts::where('id', $contract_id)->first();
$nohome = NoHome::where('contract_id', $contract_id)->first();
$comments = new ReportComment();
$comments = $comments->where('report_id', $id)
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->isMethod('get'))
return view('reports.comments', compact('comments', 'contract', 'nohome'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\ReportComment $reportComment
* @return \Illuminate\Http\Response
*/
public function show(ReportComment $reportComment)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\ReportComment $reportComment
* @return \Illuminate\Http\Response
*/
public function edit(ReportComment $reportComment)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\ReportComment $reportComment
* @return \Illuminate\Http\Response
*/
public function update(Request $request, ReportComment $reportComment)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\ReportComment $reportComment
* @return \Illuminate\Http\Response
*/
public function destroy($id, $contract_id)
{
//
ReportComment::destroy($id);
return redirect('reports/comments/'.$id.'/'.$contract_id);
}
}

View File

@@ -0,0 +1,183 @@
<?php
namespace App\Http\Controllers;
use App\User;
use App\Report;
use App\ReportComment;
use App\Models\FinishedContracts;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
class ReportController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$reports = new Report();
$reports = $reports->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('contract_id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('moderator_id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('veredict', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->ajax()) {
return view('reports.index', compact('reports'));
} else {
return view('reports.ajax', compact('reports'));
}
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Report $report
* @return \Illuminate\Http\Response
*/
public function show(Report $report)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Report $report
* @return \Illuminate\Http\Response
*/
public function veredict(Request $request, $id)
{
//
if ($request->isMethod('get'))
return view('reports.veredict', ['report' => Report::find($id)]);
$rules = [
'veredict' => 'required|string',
];
$messages = [
'veredict.required' => 'Se requiere un veredicto',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$report = Report::find($id);
$report->veredict = strip_tags($request->veredict);
$coupon->save();
return redirect('reports');
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Report $report
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Report $report)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Report $report
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
Report::destroy($id);
return redirect('reports');
}
public function report(Request $request) {
$rules = [
'contract_id' => 'required|numeric',
'comment' => 'required|string',
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
} else {
$user = Auth::user();
$contract = FinishedContracts::where('id', $request->contract_id)->first();
if ($user->id == $contract->user_id) {
$report = new Report();
$report->contract_id = $contract->id;
$moderator = User::where('role_id', 5)->get();
if ($moderator != '[]') {
$report->moderator_id = $moderator->random()->id;
} else {
$report->moderator_id = User::where('role_id', 7)->first()->id;
}
$report->save();
$reportcomment = new ReportComment();
$reportcomment->report_id = $report->id;
$reportcomment->user_id = $user->id;
$reportcomment->comment = strip_tags($request->comment);
$reportcomment->save();
$contract->status_id = 6;
$contract->save();
return response()->json([
'message' => 'Reporte registrado con éxito, nos comunicaremos con usted por correo electrónico a la brevedad para continuar con el caso'
]);
}
}
}
}

View File

@@ -0,0 +1,151 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Status;
use Illuminate\Support\Facades\Validator;
class StatusController extends Controller
{
//
public function index(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$status = new Status();
$status = $status->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('name', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->ajax()) {
return view('status.index', compact('status'));
} else {
return view('status.ajax', compact('status'));
}
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request)
{
//
if ($request->isMethod('get'))
return view('status.form');
$rules = [
'name' => 'required|string',
];
$messages = [
'name.required' => 'Se requiere el nombre del status',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$status = new Status();
$status->name = strip_tags($request->name);
$status->save();
return redirect('status');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
if ($request->isMethod('get'))
return view('status.form',['status' => Status::find($id)]);
$rules = [
'name' => 'required|string',
];
$messages = [
'name.required' => 'Se requiere el nombre del status',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$status = Status::find($id);
$status->name = strip_tags($request->name);
$status->save();
return redirect('status');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Status::destroy($id);
return redirect('status');
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,147 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
//
$request->session()->put('search', $request
->has('search') ? strip_tags($request->get('search')) : ($request->session()
->has('search') ? strip_tags($request->session()->get('search')) : ''));
$request->session()->put('field', $request
->has('field') ? strip_tags($request->get('field')) : ($request->session()
->has('field') ? strip_tags($request->session()->get('field')) : 'id'));
$request->session()->put('sort', $request
->has('sort') ? strip_tags($request->get('sort')) : ($request->session()
->has('sort') ? strip_tags($request->session()->get('sort')) : 'asc'));
//$headers = $request->get('header') != '' ? $request->get('header') : -1;
$users = new User();
$users = $users->where('id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('name', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('email', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('role_id', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orwhere('phone', 'LIKE', '%' . strip_tags($request->session()->get('search')) . '%')
->orderBy(strip_tags($request->session()->get('field')), strip_tags($request->session()->get('sort')))
->paginate(10);
if ($request->ajax()) {
return view('users.index', compact('users'));
} else {
return view('users.ajax', compact('users'));
}
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
if ($request->isMethod('get'))
return view('users.form',['user' => User::find($id)]);
$rules = [
'name' => 'required|string',
'email' => 'required|string|email',
'role' => 'required|numeric',
'openpay_id' => 'string|nullable',
];
$messages = [
'name.required' => 'Se requiere un nombre de usuario',
'email.required' => 'Se requiere un correo electrónico válido',
'role.required' => 'Se requiere un rol',
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return redirect()->back()->withInput($request->all())->withErrors($validator);
}
$user = User::find($id);
$user->name = strip_tags($request->name);
$user->email = $request->email;
$user->role_id = $request->role;
if ($request->openpay_id == "null" OR $request->openpay_id == null){
$user->openpay_id = null;
}
$user->save();
return redirect('users');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
User::destroy($id);
return redirect('users');
}
}

84
app/Http/Kernel.php Normal file
View File

@@ -0,0 +1,84 @@
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\Cors::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'rolecheck' => \App\Http\Middleware\RoleCheck::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'superadmin' => \App\Http\Middleware\SuperAdmin::class,
'appenginecron' => \App\Http\Middleware\AppEngineCron::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
/**
* The priority-sorted list of middleware.
*
* This forces non-global middleware to always be in the given order.
*
* @var array
*/
protected $middlewarePriority = [
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\Authenticate::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\Illuminate\Auth\Middleware\Authorize::class,
];
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Middleware;
use Closure;
class AppEngineCron
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!$request->hasHeader('X-Appengine-Cron')) {
return response()->json(trans('auth.unauthorized'), 401);
}
return $next($request);
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
class Authenticate extends Middleware
{
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string
*/
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
return route('login');
}
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
class CheckForMaintenanceMode extends Middleware
{
/**
* The URIs that should be reachable while maintenance mode is enabled.
*
* @var array
*/
protected $except = [
//
];
}

View File

@@ -0,0 +1,27 @@
<?php
namespace App\Http\Middleware;
use Closure;
class Cors
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$allowedOrigins = ['http://localhost', 'ionic://localhost'];
if (in_array($request->server('HTTP_ORIGIN'), $allowedOrigins)) {
return $next($request)
->header('Access-Control-Allow-Origin', $request->server('HTTP_ORIGIN'))
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With, X-XSRF-TOKEN');
}
return $next($request);
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
class EncryptCookies extends Middleware
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
//
];
}

View File

@@ -0,0 +1,26 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/home');
}
return $next($request);
}
}

View File

@@ -0,0 +1,26 @@
<?php
namespace App\Http\Middleware;
use Closure;
class RoleCheck
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if($request->user()) {
if($request->user()->role_id == $role OR $request->user()->role_id >= 6) {
return $next($request);
}
} else {
return redirect('home');
}
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Middleware;
use Closure;
class SuperAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if($request->user()->role_id == 7) {
return $next($request);
} else {
return redirect('home');
}
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
class TrimStrings extends Middleware
{
/**
* The names of the attributes that should not be trimmed.
*
* @var array
*/
protected $except = [
'password',
'password_confirmation',
];
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array|string
*/
protected $proxies;
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers = Request::HEADER_X_FORWARDED_ALL;
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* Indicates whether the XSRF-TOKEN cookie should be set on the response.
*
* @var bool
*/
protected $addHttpCookie = true;
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
}