403Webshell
Server IP : 54.233.248.239  /  Your IP : 172.28.1.13
Web Server : Apache
System : Linux ip-172-28-29-189 6.5.0-1014-aws #14~22.04.1-Ubuntu SMP Thu Feb 15 15:27:06 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.2.34-43+ubuntu22.04.1+deb.sury.org+1
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/vinumday2_0/app/Modules/OfertaReserva/Models/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/vinumday2_0/app/Modules/OfertaReserva/Models/OfertaReserva.php
<?php

namespace App\Modules\OfertaReserva\Models;

use DB;
use App\MyModel;
use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;
use \Dimsav\Translatable\Translatable;
use App\CampoModulo;
use Session;
use Cart;

use Illuminate\Support\Facades\Log;
use App\Modules\Oferta\Models\Oferta;
use App\Modules\OfertaHasProduto\Models\OfertaHasProduto;
use App\BasicInfo;
use App\Services\GeralService;

class OfertaReserva extends MyModel
{
	// use LogsActivity;
	// use HasSlug;
	use Translatable;

	protected $table = 'oferta_reserva';
	protected $guarded = [];
	private $rules = array();
	private $messages = array();
	public $translatedAttributes = [];
	public $translationModel = 'App\Modules\OfertaReserva\Models\OfertaReservaDescricao';

	public function __construct(){
		parent::__construct();
		$this->setMessages($this->messages);
		$this->setRules($this->rules);
		$this->translatedAttributes = CampoModulo::join('sis_modulos', 'sis_campo_modulo.id_modulo', '=', 'sis_modulos.id')->where('sis_campo_modulo.translatable', 1)->where('sis_modulos.nome', 'OfertaReserva')->pluck('sis_campo_modulo.nome')->toArray();
	}

	public static function getLocalTz(){
		return config('app.local_tz');
	}

	public function getLogNameToUse(string $eventName = ''): string
	{
		return 'log_oferta_reserva';
	}

	/**
	* Get the options for generating the slug.
	*/
	public function getSlugOptions() : SlugOptions
	{
		return SlugOptions::create()
		->generateSlugsFrom(['nome', 'titulo'])
		->saveSlugsTo('slug');
	}

	public function getBySlug($slug){
		return DB::table($this->table)->where('slug',$slug)->firstOrFail();
	}

	public function criar($fields, $input){
		$insert = [];
		foreach ($fields as $field) {
			$insert[$field] = $input[$field];
		}

		$oferta_reserva = new OfertaReserva();
		$oferta_reserva->fill($insert);
		$oferta_reserva->save();

		return $oferta_reserva->id;
	}

	public function editar($fields, $input, $id){
		$insert = [];
		foreach ($fields as $field) {
			$insert[$field] = $input[$field];
		}

		$oferta_reserva = OfertaReserva::find($id);
		$oferta_reserva->fill($insert);
		$oferta_reserva->save();

		return $id;
	}

	public function deletar($id){
		$oferta_reserva = OfertaReserva::find($id);
		$oferta_reserva->delete();
		return true;
	}


	public function getImagem($id){
		return DB::table($this->table.'_imagens')->find($id);
	}

	public function getImagens($id){
		return DB::table($this->table.'_imagens')->where('id_oferta_reserva', $id)->get();
	}

	public function criar_imagem($input){
		return DB::table($this->table.'_imagens')->insert([
			[
				'id_oferta_reserva' => $input['id_oferta_reserva'],
				'thumbnail_principal' => $input['thumbnail_principal'],
			]
		]);
	}
	
	public function deletar_imagem($id){
		return DB::table($this->table.'_imagens')
		->where('id', $id)
		->delete();
	}

	public function getNextAutoIncrement(){
		$lastId = DB::select("SELECT AUTO_INCREMENT FROM information_schema.tables WHERE TABLE_NAME = '$this->table' ORDER BY table_name;")[0]->AUTO_INCREMENT;
		return $lastId;
	}

	public function cliente(){
		return $this->belongsTo('App\Modules\Cadastro\Models\Cadastro', 'cliente_id');
	}

	public function oferta(){
		return $this->belongsTo('App\Modules\Oferta\Models\Oferta', 'oferta_id');
	}

	public static function atualizaEstoque($oferta, $pedidoVenda, $quantidade, $id_produto = FALSE){

		$data_atual = OfertaReserva::dataAtual();
		$reserva    = OfertaReserva::where('oferta_id', $oferta->id)->where('hash', session('hash_oferta'))->first();
		$BasicInfo  = BasicInfo::first();

		$estoque         = $oferta->estoque - $quantidade;
		$qtde_vendida    = $oferta->qtde_vendida + $quantidade;
	
		if($reserva && $data_atual < $reserva->data_expiracao && $BasicInfo->reserva_estoque == 1){
			OfertaReserva::where('oferta_id', $oferta->id)->where('hash', session('hash_oferta'))->delete();
            $sql = "UPDATE oferta SET qtde_vendida = {$qtde_vendida} WHERE id = {$oferta->id}";
		}else{
			$oferta->estoque = $estoque;
            $sql = "UPDATE oferta SET qtde_vendida = {$qtde_vendida}, estoque = {$estoque} WHERE id = {$oferta->id}";
		}

		//Verifica ProdutoxEstoque
		if($id_produto){
			$OfertaProduto = OfertaHasProduto::where('id_oferta', $oferta->id)->where('id_produto', $id_produto)->first();
			$estoque       = $OfertaProduto->estoque - $quantidade;
			$sqlUpdate     = "UPDATE oferta_has_produto SET estoque = {$estoque} WHERE id_oferta = {$oferta->id} AND id_produto = {$id_produto}";
			DB::update(DB::raw($sqlUpdate));
        }

        DB::update(DB::raw($sql));
		GeralService::atualizaQtdeVendidaCanal($oferta, $quantidade);

	}

	public static function limpaSession(){
		session()->forget('data_controle');
		session()->forget('data_expiracao');
		session()->forget('hash_oferta');
	}

	public static function check($oferta, $quantidade, $estoque = FALSE){

		$BasicInfo  = BasicInfo::first();
		$estoque    = $estoque ? $estoque : $oferta->estoque;

		if($BasicInfo->reserva_estoque == 1){
			$reserva = OfertaReserva::where('oferta_id', $oferta->id)->where('hash', session('hash_oferta'))->first();
			if($reserva && ($quantidade > ($oferta->estoque + $reserva->quantidade))){
				return false;
			}elseif(!$reserva && $quantidade > $oferta->estoque){
				return false;
			}
			return true;
		}elseif($quantidade > $estoque){
			return false;
		}

		return true;
	}

	public static function dataExpiracao($tempo_expiracao){
		$date = date('Y-m-d H:i:s', strtotime("+{$tempo_expiracao} minutes"));
		if(!empty(OfertaReserva::getLocalTz())){
			$date = date('Y-m-d H:i:s', strtotime(OfertaReserva::getLocalTz() . " hour",strtotime($date)));
		}
		return $date;
	}

	public static function dataControle(){
		if(!empty(OfertaReserva::getLocalTz())){
			return date('Y-m-d H:i:s', strtotime(OfertaReserva::getLocalTz() . " hour",strtotime(date('Y-m-d H:i:s'))));	
		}
		return date('Y-m-d H:i:s');
	}

	public static function dataAtual(){
		if(!empty(OfertaReserva::getLocalTz())){
			return date('Y-m-d H:i:s', strtotime(OfertaReserva::getLocalTz() . " hour",strtotime(date('Y-m-d H:i:s'))));	
		}
		return date('Y-m-d H:i:s');
	}

	public static function reserva($oferta, $quantidade, $action = 'add'){

		$BasicInfo  = BasicInfo::first();
		$keyReserva = str_replace("=", "", base64_encode('reservaTimeout'));
		if($BasicInfo->reserva_estoque != 1){ // || isset($_COOKIE[$keyReserva])
			return false;
		}

		$tempo_reserva_estoque = (!empty($BasicInfo->tempo_reserva_estoque) ? $BasicInfo->tempo_reserva_estoque : "00:15");
		$tempo_reserva         = explode(":", $tempo_reserva_estoque);
		$tempo_expiracao       = (int) $tempo_reserva[1]; //em minutos

		$clienteLogado = GeralService::buscarClienteLogado();

		$cliente        = ($clienteLogado ? $clienteLogado->id : NULL);
		$data_atual     = OfertaReserva::dataAtual();
		$data_controle  = (session('data_controle') ? session('data_controle') : OfertaReserva::dataControle());
		$data_expiracao = (session('data_expiracao') ? session('data_expiracao') : OfertaReserva::dataExpiracao($tempo_expiracao));
		$hash_oferta    = (session('hash_oferta') ? session('hash_oferta') : md5($data_expiracao.microtime(true)));

		$reservas = OfertaReserva::where('hash', $hash_oferta)
										->where('data_controle', $data_controle)
										->where('data_expiracao', $data_expiracao)->get();

		if(!session('data_expiracao') || (count($reservas) == 0) || (session('data_expiracao') && $data_atual > session('data_expiracao'))){

			if(session('data_expiracao') && $data_atual > session('data_expiracao')){

				$data_controle  = OfertaReserva::dataControle();
				$data_expiracao = OfertaReserva::dataExpiracao($tempo_expiracao);
				$hash_oferta    = md5($data_expiracao.microtime(true));

				if(count($reservas) > 0){
					foreach ($reservas as $objOfertaReserva) {
						$objOfertaReserva->data_controle = $data_controle;
						$objOfertaReserva->data_expiracao = $data_expiracao;
						$objOfertaReserva->hash = $hash_oferta;
						$objOfertaReserva->save();
					}
				}else{
					foreach (Cart::content() as $item) {
						if($item->options->id == $oferta->id){
							continue;
						}
						$OfertaReserva                 = new OfertaReserva;
						$OfertaReserva->oferta_id      = $item->options->id;
						$OfertaReserva->cliente_id     = $cliente;
						$OfertaReserva->data_controle  = $data_controle;
						$OfertaReserva->data_expiracao = $data_expiracao;
						$OfertaReserva->hash           = $hash_oferta;
						$OfertaReserva->quantidade     = $item->qty;
						$OfertaReserva->save();

						$objOferta = Oferta::find($item->options->id);
						if($objOferta->estoque > 0){
							$objOferta->estoque = $objOferta->estoque - $item->qty;
							$objOferta->save();
						}
			        }
				}

				session(['data_controle'  => $data_controle, 'data_expiracao' => $data_expiracao, 'hash_oferta' => $hash_oferta]);

			}elseif(count($reservas) == 0){
				$data_controle  = OfertaReserva::dataControle();
				$data_expiracao = OfertaReserva::dataExpiracao($tempo_expiracao);
				$hash_oferta    = md5($data_expiracao.microtime(true));
				session(['data_controle'  => $data_controle, 'data_expiracao' => $data_expiracao, 'hash_oferta' => $hash_oferta]);
			}else{
				session(['data_controle'  => $data_controle, 'data_expiracao' => $data_expiracao, 'hash_oferta' => md5($data_expiracao.microtime(true))]);
			}
		}

		$query = OfertaReserva::where('oferta_id', $oferta->id)
										->where('hash', session('hash_oferta'))
										->where('data_controle', session('data_controle'))
										->where('data_expiracao', session('data_expiracao'));

		$OfertaReserva = $query->first();

		if($action == 'remove'){

			if($OfertaReserva){

				$oferta->estoque = $oferta->estoque + $quantidade;
				$oferta->save();

				$OfertaReserva->delete();
				
			}

			if(count($reservas) <= 1){
				session()->forget('data_controle');
				session()->forget('data_expiracao');
				session()->forget('hash_oferta');
			}

		}else{

			if(!$OfertaReserva){
				$OfertaReserva                 = new OfertaReserva;
				$OfertaReserva->oferta_id      = $oferta->id;
				$OfertaReserva->cliente_id     = $cliente;
				$OfertaReserva->data_controle  = session('data_controle');
				$OfertaReserva->data_expiracao = session('data_expiracao');
				$OfertaReserva->hash           = session('hash_oferta');
				$qtdeReserva                   = $quantidade;
				$action                        = 'add';
			}else{
				$qtdeReserva = $OfertaReserva->quantidade;
			}
			$OfertaReserva->quantidade = $quantidade;
			$OfertaReserva->save();

			if($action == 'add'){
				$oferta->estoque = $oferta->estoque - $quantidade;
			}else{
				//update
				if($qtdeReserva > $quantidade){
					$oferta->estoque = $oferta->estoque + ($qtdeReserva - $quantidade);
				}else{
					$oferta->estoque = $oferta->estoque - ($quantidade - $qtdeReserva);
				}
			}
			$oferta->save();
		}

		$data_atual = OfertaReserva::dataAtual();

		$reserva = [
			'data_controle'  => (session('data_controle') ? date('Y/m/d H:i:s', strtotime(session('data_controle'))) : ''),
            'data_expiracao' => (session('data_expiracao') ? date('Y/m/d H:i:s', strtotime(session('data_expiracao'))) : ''),
            'data_expire'    => (session('data_expiracao') ? date('d/m/Y H:i:s', strtotime(session('data_expiracao'))) : ''),
            'data_atual'     => date('d/m/Y H:i:s', strtotime($data_atual))
        ];

        return $reserva;

	}

}

Youez - 2016 - github.com/yon3zu
LinuXploit