<?php
namespace SHServ\Entities;
use \SHServ\Models\NovaPoshta;
use \SHServ\Containers\Registration\OrdersContainer;
use \SHServ\Entities\UAdPost;
use \SHServ\Entities\User;
class Order extends \SHServ\Middleware\Entity {
public static $table_name = "orders";
protected static $fields = [
"id", "seller_id", "customer_id", "uap_id", "price",
"state", "currency", "single_price", "comment", "delivery_method",
"delivery_id", "create_at", "update_at"
];
protected UAdPost $uadpost;
protected User $seller;
protected User $customer;
public function __construct(Int $id, Array $data = []){
parent::__construct(
self::$table_name,
$id,
$data
);
OrdersContainer::add_entity_item($this);
}
public function fill(Array $data = []) {
parent::fill($data);
$this -> uadpost = new UAdPost($this -> uap_id);
$this -> seller = new User($this -> seller_id);
$this -> customer = new User($this -> customer_id);
}
public function uadpost(): UAdPost {
if(!$this -> was_filled()) {
$this -> fill();
}
$this -> uadpost -> currency = $this -> currency;
$this -> uadpost -> price = $this -> price;
return $this -> uadpost;
}
public function get_formatted_create_at() {
return app() -> utils -> formatted_timestamp($this -> create_at, true);
}
public function get_delivery_method_text_name() {
$delivery_map = app() -> utils -> get_delivery_method_map();
return isset($delivery_map[$this -> delivery_method]) ? $delivery_map[$this -> delivery_method] : "";
}
public function seller(): User {
if(!$this -> was_filled()) {
$this -> fill();
}
return $this -> seller;
}
public function customer(): User {
if(!$this -> was_filled()) {
$this -> fill();
}
return $this -> customer;
}
public function confirm() {
$this -> state = "confirmed";
return $this -> update();
}
public function cancel() {
$this -> state = "canceled";
return $this -> update();
}
public function complete() {
$this -> state = "completed";
$this -> seller() -> statistics() -> total_saled_increase();
$this -> uadpost() -> statistics() -> sales_increase();
return $this -> update();
}
public function remove() {
$this -> remove_entity();
}
public function nova_poshta_delivery(): ?NPDelivery {
if($this -> delivery_method !== "1") {
return null;
}
return $this -> get_pet_instance(
"NPDelivery",
fn() => (new NovaPoshta()) -> get_by_order_id($this -> id)
);
}
}