File: /home/artinside/sites.artinside.com.br/paliar/sourcebackup/App/Admin/Order.php
<?php
namespace Source\App\Admin;
use Source\Core\View;
use Source\Models\Ecommerce\OrderItens;
use Source\Support\Email;
use Source\Models\Ecommerce\Orders;
use Source\Support\Pager;
/**
* Class Orders
* @package Source\App\Admin
*/
class Order extends Admin
{
/**
* Order constructor.
*/
public function __construct($router)
{
parent::__construct();
$this->view->addData("router", $router);
}
/**
* @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("/order/{$data['type']}/{$s}/1")]);
return;
}
$order = "id DESC";
$search = null;
$query = "";
$title = "Todos Pedidos";
if($data["type"] == "waiting"){
$query = "(status = 'paid' OR status = 'authorized' OR status = 'processing' OR status = 'waiting_payment') AND shipment_code = 'Aguardando Entrega'";
$order = "id ASC";
$title = "Aguardando Entrega";
}
if($data["type"] == "delivered"){
$query = "(status = 'paid' OR status = 'authorized') AND shipment_code != 'Aguardando Entrega'";
$title = "Pedidos Entregue";
}
if($data["type"] == "refused"){
$query = "(status = 'refused' OR status = 'canceled' OR status = 'refunded' OR status = 'pending_refund')";
$title = "Cancelados e Estornados";
}
if (!empty($data["search"]) && str_search($data["search"]) != "all") {
$search = str_search($data["search"]);
$orders = (new Orders())->find("MATCH(title, subtitle) AGAINST(:s)", "s={$search}");
if (!$orders->count()) {
$this->message->info("Sua pesquisa não retornou resultados")->flash();
redirect("/order/{$data["type"]}/all/1");
}
}
$orders = (new Orders())->find($query);
$all = ($search ?? "all");
$pager = new Pager(url("/admin/order/{$data["type"]}/{$all}/"));
$pager->pager($orders->count(), 20, (!empty($data["page"]) ? $data["page"] : 1));
$head = $this->seo->render(
CONF_SITE_NAME . " | Orders",
CONF_SITE_DESC,
url("/admin"),
url("/admin/assets/images/image.jpg"),
false
);
echo $this->view->render("widgets/order/order", [
"app" => "order/order",
"head" => $head,
"orders" => $orders->order($order)->limit($pager->limit())->offset($pager->offset())->fetch(true),
"paginator" => $pager->render(),
"search" => $search,
"title" => $title
]);
}
/**
* @param array|null $data
*/
public function invoice(?array $data): void
{
$order = (new Orders())->findById((int)$data['order_id']);
if (!$order) {
redirect("admin/error/404");
}
$orderItems = (new OrderItens())->find("order_id = :id", "id={$order->id}");
if (!$orderItems) {
redirect("admin/error/404");
}
$head = $this->seo->render(
CONF_SITE_NAME . " | Pedido",
CONF_SITE_DESC,
url("/admin"),
url("/admin/assets/images/image.jpg"),
false
);
echo $this->view->render("widgets/order/invoice", [
"app" => "order/order",
"head" => $head,
"order" => $order,
"orderItems" => $orderItems->fetch(true)
]);
}
public function shipping(array $data):void
{
if(isset($data) AND $data["action"] != null){
$data = filter_input_array(INPUT_POST, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$Orders = (new \Source\Models\Ecommerce\Orders())->findById($data["id"]);
$Orders->shipment_code = $data["shipment_code"] ? $data["shipment_code"] : "N/A";
if($Orders->save()){
$view = new View(__DIR__ . "/../../../shared/views/email");
$message = $view->render("shipped", [
"title" => CONF_SITE_NAME . " | Pedido Enviado",
"user" => $Orders->user()->fullName(),
"code" => $data["shipment_code"] ? $data["shipment_code"] : "N/A",
"orderId" => $data["id"]
]);
(new Email())->bootstrap(
CONF_SITE_NAME . " | Pedido Enviado",
$message,
$Orders->user()->data()->email, $Orders->user()->fullName()
)->send();
$json["message"] = $this->message->success("Pedido Atualizado com sucesso!")->flash();
$json["reload"] = true;
echo json_encode($json);
return;
}
$json["message"] = $this->message->error("Não foi possível atualizar, contate o suporte")->render();
echo json_encode($json);
return;
}
$json["message"] = $this->message->error("Não foi possível atualizar, contate o suporte")->render();
echo json_encode($json);
return;
}
}