PATH:
home
/
lab2454c
/
costbloc.com
/
app
/
Models
<?php /** * @package Vendor Model * @author TechVillage <support@techvill.org> * @contributor Sakawat Hossain Rony <[sakawat.techvill@gmail.com]> * @contributor Al Mamun <[almamun.techvill@gmail.com]> * @created 17-08-2021 * @modified 29-09-2021 */ namespace App\Models; use App\Models\Model; use App\Services\Mail\sellerStatusMailService; use App\Traits\ModelTraits\hasFiles; use App\Traits\ModelTraits\Metable; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Support\Facades\DB; use Modules\Shop\Http\Models\Shop; class Vendor extends Model { use hasFiles, Metable, SoftDeletes; protected $guarded = []; /** * The table associated with the model. * * @var string */ protected $table = 'vendors'; protected $metaTable = 'vendors_meta'; /** * The "booted" method of the model. * * @return void */ protected static function booted() { static::updated(function ($vendor) { if ($vendor->isDirty('status') && $vendor->status != $vendor->getOriginal('status')) { (new sellerStatusMailService)->send($vendor); } }); } /** * Relation with AttributeGroup model * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function attributeGroups() { return $this->hasMany('App\Models\AttributeGroup', 'vendor_id', 'id'); } /** * Relation with Brand model * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function brands() { return $this->hasMany('App\Models\Brand', 'vendor_id', 'id'); } /** * Relation with FlashSale model * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function flashSales() { return $this->hasMany('App\Models\FlashSale', 'vendor_id', 'id'); } /** * Relation with Product model * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function products() { return $this->hasMany('App\Models\Product', 'vendor_id', 'id'); } /** * Relation with OptionGroup model * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function optionGroups() { return $this->hasMany('App\Models\OptionGroup', 'vendor_id', 'id'); } /** * Relation with StockManagement model * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function stockManagements() { return $this->hasMany('App\Models\StockManagement', 'vendor_id', 'id'); } /** * Relation with VendorUser model * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function users() { return $this->hasMany('App\Models\VendorUser', 'vendor_id', 'id'); } /** * @return \Illuminate\Database\Eloquent\Relations\HasOne */ public function avatarFile() { return $this->hasOne('App\Models\File', 'object_id')->where('object_type', 'VENDOR'); } /** * Relation with coupon model * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function coupons() { return $this->hasMany('Modules\Coupon\Http\Models\Coupon', 'vendor_id', 'id'); } /** * Relation with shop model * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function shops() { return $this->hasMany('Modules\Shop\Http\Models\Shop', 'vendor_id', 'id'); } /** * Relation with shop model * * @return \Illuminate\Database\Eloquent\Relations\HasOne */ public function shop() { return $this->hasOne('Modules\Shop\Http\Models\Shop', 'vendor_id', 'id')->latestOfMany(); } /** * Relation with Transaction model * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function transactions() { return $this->hasMany(Transaction::class); } /** * Relation with user model * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function userList() { return $this->belongsToMany(User::class, 'vendor_users'); } /** * Store * * @param array $data * @return int|null */ public function store($data = []) { $vendor = parent::create($data['vendorData']); if (isset($data['vendorMetaData']) && !empty($data['vendorMetaData'])) { $vendor->setMeta($data['vendorMetaData']); $vendor->save(); $arr = ['vendor_logo', 'cover_photo']; foreach ($data['vendorMetaData'] as $key => $value) { if (!in_array($key, $arr)) { continue; } request()->file_id = [$value]; $vendorMeta = $vendor->metas()->where('key', $key)->first(); $vendorMeta->updateFiles(['isUploaded' => false, 'isOriginalNameRequired' => true, 'thumbnail' => true]); } } self::forgetCache(); return $vendor->id; } /** * Update Vendor * @param array $data * @param null $id * @return bool */ public function updateVendor($data = [], $id = null) { $vendor = Vendor::where('id', $id)->first(); if (!$vendor) { return false; } $vendor->update($data['vendorData']); $vendor = Vendor::where('id', $id)->first(); $vendor->setMeta($data['vendorMetaData']); $vendor->save(); $arr = ['vendor_logo', 'cover_photo']; foreach ($data['vendorMetaData'] as $key => $value) { if (!in_array($key, $arr)) { continue; } request()->file_id = [$value]; $vendor = Vendor::where('id', $id)->first()->metas()->where('key', $key)->first(); $vendor->updateFiles(['isUploaded' => false, 'isOriginalNameRequired' => true, 'thumbnail' => true]); } self::forgetCache(['vendors', 'categories', 'brands']); return true; } /** * Delete * * @param int $id * @return array */ public function remove($id = null) { $data = ['status' => 'fail', 'message' => __('Something went wrong, please try again.')]; $record = parent::find($id); if (!empty($record)) { $record->deleteFiles(['thumbnail' => true]); $record->delete(); self::forgetCache(['vendors', 'brands', 'attribute_groups', 'attributes', 'attribute_values']); $data['status'] = 'success'; $data['message'] = __('The :x has been successfully deleted.', ['x' => __('Vendor')]); } return $data; } /** * shop id to vendor id * * @return int $id */ public static function shopToVendor($id) { return Shop::where('id', $id)->first()->vendor_id ?? null; } /** * find shop rating and review count * * @return object */ public function shopReview() { $productReview = $this->hasManyThrough(Review::class, Product::class)->where('reviews.status', 'Active'); return (object) ['count' => $productReview->count(), 'rating' => $productReview->avg('rating')]; } /** * Get all of the review for the vendor. * * @return \Illuminate\Database\Eloquent\Relations\HasManyThrough */ public function reviews() { return $this->hasManyThrough(Review::class, Product::class); } /** * Top seller * * @return mixed */ public static function topSeller() { $vendors = OrderDetail::select(DB::raw('count("vendor_id") as total_vendor_id, vendor_id'))->groupBy('vendor_id')->orderBy('total_vendor_id', 'desc')->take(20)->get(); return $vendors; } /** * Get the vendor cover photo. * * @return \Illuminate\Database\Eloquent\Casts\Attribute */ public function getCoverAttribute() { return $this->metas()->where('key', 'cover_photo')->first(); } /** * Get the vendor logo. * * @return \Illuminate\Database\Eloquent\Casts\Attribute */ public function getLogoAttribute() { return $this->metas()->where('key', 'vendor_logo')->first(); } /** * calculate ship on time * * @param $vendorId * @return float|int */ public function onTimeShipment() { $onTimeProducts = OrderDetail::where('vendor_id', $this->id)->where('is_delivery', 1); if (!$onTimeProducts->exists()) { return 100; } else { $totalVendorProducts = $onTimeProducts->count(); $onTimeProducts = $onTimeProducts->where('is_on_time', 1)->count(); if ($totalVendorProducts > 0) { return round(($onTimeProducts * 100) / $totalVendorProducts); } return 100; } } /** * calculate order cancelation in percent * * @return float|int */ public function orderCancel() { $query = OrderDetail::select('order_id', 'order_status_id')->where('vendor_id', $this->id)->get(); if (!$query) { return 0; } $orderStatus = OrderStatus::whereSlug('cancelled')->first(); $totalVendorOrder = $query->groupBy('order_id')->count(); $keep = $query->where('order_status_id', '!=', $orderStatus->id)->groupBy('order_id')->count(); $totalCancelOrder = $totalVendorOrder - $keep; if ($totalVendorOrder > 0) { return round(($totalCancelOrder / $totalVendorOrder) * 100); } return 0; } /** * check vendor exist or not * * @param $vendorId * @return bool */ public static function isVendorExist($vendorId = null) { $vendor = parent::find($vendorId); if (!empty($vendor)) { return true; } return false; } }
[-] TransactionReference.php
[edit]
[-] Attribute.php
[edit]
[-] ProductStats.php
[edit]
[-] Language.php
[edit]
[-] CategoryAttribute.php
[edit]
[-] File.php
[edit]
[-] Review.php
[edit]
[+]
..
[-] Favorite.php
[edit]
[-] OrderStatus.php
[edit]
[-] OrderNoteHistory.php
[edit]
[-] Country.php
[edit]
[-] Permission.php
[edit]
[-] Address.php
[edit]
[-] Seo.php
[edit]
[-] EmailTemplate.php
[edit]
[-] AttributeGroup.php
[edit]
[-] Model.php
[edit]
[-] WithdrawalMethod.php
[edit]
[-] Preference.php
[edit]
[-] ProductMeta.php
[edit]
[-] Category.php
[edit]
[-] RoleUser.php
[edit]
[-] Order.php
[edit]
[-] UserSearch.php
[edit]
[-] Location.php
[edit]
[-] Wishlist.php
[edit]
[-] ProductTag.php
[edit]
[-] Customer.php
[edit]
[-] FlashSale.php
[edit]
[-] OrderStatusRole.php
[edit]
[-] ProductCrossSale.php
[edit]
[-] OrderStatusHistory.php
[edit]
[-] OrderDetail.php
[edit]
[-] Brand.php
[edit]
[-] ProductUpsale.php
[edit]
[-] Wallet.php
[edit]
[-] PasswordReset.php
[edit]
[-] AttributeValue.php
[edit]
[-] OrderMeta.php
[edit]
[-] Transaction.php
[edit]
[-] Product.php
[edit]
[-] UserWithdrawalSetting.php
[edit]
[-] EmailConfiguration.php
[edit]
[-] Currency.php
[edit]
[-] PermissionRole.php
[edit]
[-] ProductRelate.php
[edit]
[-] Search.php
[edit]
[-] User.php
[edit]
[-] VendorUser.php
[edit]
[-] themes.php
[edit]
[-] Role.php
[edit]
[-] ProductCategory.php
[edit]
[-] Tag.php
[edit]
[-] MetaData.php
[edit]
[-] Vendor.php
[edit]