'Created', self::CONFIRMED => 'Confirmed', self::DELIVERED => 'Delivered', self::COMPLETED => 'Completed', self::CANCELLED => 'Cancelled', ]; /** * Generate order code * * @return string */ public static function generateCode() { $dateCode = self::ORDERCODE . '/' . date('Ymd') . '/' . General::integerToRoman(date('m')). '/' . General::integerToRoman(date('d')). '/'; $lastOrder = self::select([\DB::raw('MAX(orders.code) AS last_code')]) ->where('code', 'like', $dateCode . '%') ->first(); $lastOrderCode = !empty($lastOrder) ? $lastOrder['last_code'] : null; $orderCode = $dateCode . '00001'; if ($lastOrderCode) { $lastOrderNumber = str_replace($dateCode, '', $lastOrderCode); $nextOrderNumber = sprintf('%05d', (int)$lastOrderNumber + 1); $orderCode = $dateCode . $nextOrderNumber; } if (self::_isOrderCodeExists($orderCode)) { return generateOrderCode(); } return $orderCode; } /** * Check if the generated order code is exists * * @param string $orderCode order code * * @return void */ private static function _isOrderCodeExists($orderCode) { return Order::where('code', '=', $orderCode)->exists(); } public function orderItems() { return $this->hasMany(OrderItem::class); } public function shipment(){ return $this->hasOne(Shipment::class); } public function isPaid() { return $this->payment_status == self::PAID; } public function isCreated() { return $this->status == self::CREATED; } public function isConfirmed() { return $this->status == self::CONFIRMED; } public function isDelivered() { return $this->status == self::DELIVERED; } public function isCancelled(){ return $this->status == self::CANCELLED ; } /** * Add full_name custom attribute to order object * * @return boolean */ public function getCustomerFullNameAttribute() { return "{$this->customer_first_name} {$this->customer_last_name}"; } }