File: //home/artinside/public_html/finance/source/App/Admin/Coupons.php
<?php
namespace Source\App\Admin;
use Source\Models\Ecommerce\Coupon;
use Source\Models\User;
use Source\Support\Pager;
/**
* Class Coupons
* @package Source\App\Admin
*/
class Coupons extends Admin
{
/**
* Dash constructor.
*/
public function __construct($router)
{
parent::__construct();
$this->view->addData("router", $router);
}
/**
* @param array|null $data
* @throws \Exception
*/
/**
* @param array|null $data
*/
public function home(?array $data): void
{
//search redirect
if (!empty($data["s"])) {
$s = str_search($data["s"]);
echo json_encode(["redirect" => url("/admin/coupon/home/{$s}/1")]);
return;
}
$search = null;
$coupons = (new Coupon())->find();
if (!empty($data["search"]) && str_search($data["search"]) != "all") {
$search = str_search($data["search"]);
$coupons = (new Coupon())->find("MATCH(title) AGAINST(:s)", "s={$search}");
if (!$coupons->count()) {
$this->message->info("Sua pesquisa não retornou resultados")->flash();
redirect("/admin/coupon/home");
}
}
$all = ($search ?? "all");
$pager = new Pager(url("/admin/coupon/home/{$all}/"));
$pager->pager($coupons->count(), 20, (!empty($data["page"]) ? $data["page"] : 1));
$head = $this->seo->render(
CONF_SITE_NAME . " | Cupom de descontos",
CONF_SITE_DESC,
url("/admin"),
url("/admin/assets/images/image.jpg"),
false
);
echo $this->view->render("widgets/coupon/home", [
"app" => "coupon",
"head" => $head,
"coupons" => $coupons->limit($pager->limit())->offset($pager->offset())->order("valid_at DESC")->fetch(true),
"paginator" => $pager->render(),
"search" => $search
]);
}
/**
* @param array|null $data
* @throws \Exception
*/
public function coupon(?array $data): void
{
//create
if (!empty($data["action"]) && $data["action"] == "create") {
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$create = (new Coupon())->find("code = :code", "code={$data["code"]}");
if($create->count()){
$json["message"] = $this->message->warning("Código de cupom já cadastrado, favor escolha outro")->render();
echo json_encode($json);
return;
}
$create->title = $data["title"];
$create->code = $data["code"];
$create->content = $data["content"];
$create->value = $data["value"];
$create->quantity = $data["quantity"];
$create->partner = $data["partner"] ? $data["partner"] : "";
$create->partner_commission = $data["partner_commission"] ? $data["partner_commission"] : 0.00;
$create->uses = 0;
$create->valid_at = date_fmt_back($data["valid_at"]) . " 23:59:59";
if(!is_date($create->valid_at)){
$json["message"] = $this->message->error("Data de validade inválida")->render();
echo json_encode($json);
return;
}
if (!$create->save()) {
$json["message"] = $create->message()->render();
echo json_encode($json);
return;
}
$this->message->success("Cupon criado com sucesso...")->flash();
$json["redirect"] = url("/admin/coupon/home");
echo json_encode($json);
return;
}
//update
if (!empty($data["action"]) && $data["action"] == "update") {
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$edit = (new Coupon())->findById($data["coupon_id"]);
if (!$edit) {
$this->message->error("Você tentou editar uma categoria que não existe ou foi removida")->flash();
echo json_encode(["redirect" => url("/admin/product/categories")]);
return;
}
$edit->title = $data["title"];
$edit->content = $data["content"];
$edit->value = $data["value"];
$edit->quantity = $data["quantity"];
$edit->partner = $data["partner"] ? $data["partner"] : "";
$edit->partner_commission = $data["partner_commission"] ? $data["partner_commission"] : 0.00;
$edit->valid_at = date_fmt_back($data["valid_at"]) . " 23:59:59";
if(!is_date($edit->valid_at)){
$json["message"] = $this->message->error("Data de validade inválida")->render();
echo json_encode($json);
return;
}
if (!$edit->save()) {
$json["message"] = $edit->message()->render();
echo json_encode($json);
return;
}
$this->message->success("Cupom atualizado com sucesso...")->flash();
echo json_encode(["redirect" => url("/admin/coupon/home")]);
return;
}
//delete
if (!empty($data["action"]) && $data["action"] == "delete") {
$data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
$delete = (new Coupon())->findById($data["coupon_id"]);
if (!$delete) {
$json["message"] = $this->message->error("O Cupom não existe ou já foi excluído antes")->render();
echo json_encode($json);
return;
}
$delete->destroy();
$this->message->success("O Cupom foi excluído com sucesso...")->flash();
echo json_encode(["reload" => true]);
return;
}
$edit = null;
if (!empty($data["coupon_id"])) {
$itemId = filter_var($data["coupon_id"], FILTER_VALIDATE_INT);
$edit = (new Coupon())->findById($itemId);
}
$head = $this->seo->render(
CONF_SITE_NAME . " | Cupom",
CONF_SITE_DESC,
url("/admin"),
url("/admin/assets/images/image.jpg"),
false
);
echo $this->view->render("widgets/coupon/coupon", [
"app" => "coupon",
"head" => $head,
"partners" => (new User())->find("level = 2")->fetch(true),
"coupon" => $edit
]);
}
}