diff --git a/app/Http/Controllers/Admin/CustomerController.php b/app/Http/Controllers/Admin/CustomerController.php index 22a9edc..8bc85d0 100644 --- a/app/Http/Controllers/Admin/CustomerController.php +++ b/app/Http/Controllers/Admin/CustomerController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use App\Http\Controllers\XController; use App\Http\Requests\CustomerSaveRequest; use App\Models\Access; +use App\Models\Credit; use App\Models\Customer; use Illuminate\Http\Request; use App\Helper; @@ -50,11 +51,18 @@ class CustomerController extends XController { $customer->name = $request->input('name'); - $customer->address = $request->input('address'); - $customer->state = $request->input('state'); - $customer->credit = $request->input('credit')??0 ; - $customer->city = $request->input('city'); - $customer->postal_code = $request->input('postal_code'); + if ($customer->credit != $request->input('credit')){ + $diff = $request->input('credit') - $customer->credit; + $customer->credit = $request->input('credit')??0 ; + $cr = new Credit(); + $cr->customer_id = $customer->id; + $cr->amount = $diff; + $cr->data = json_encode([ + 'user_id' => auth()->user()->id, + 'message' => __("Increase / decrease by Admin"), + ]); + $cr->save(); + } if ($request->has('email')) { $customer->email = $request->input('email'); } diff --git a/app/Http/Controllers/CardController.php b/app/Http/Controllers/CardController.php index 5b6f298..4c5cd29 100644 --- a/app/Http/Controllers/CardController.php +++ b/app/Http/Controllers/CardController.php @@ -123,12 +123,19 @@ class CardController extends Controller $inv->total_price = $total; $inv->save(); - return [$inv,$inv->orders]; + // clear shopping card + // self::clear(); + return [$inv, $inv->orders]; } public static function clear() { + if (auth('customer')->check()){ + $customer = auth('customer')->user(); + $customer->card = null; + $customer->save(); + } \Cookie::expire('card'); \Cookie::expire('q'); return true; diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index a1e2397..c42c651 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -422,11 +422,6 @@ class ClientController extends Controller } } - public function profile() - { - return auth('customer')->user(); - } - public function sendSms(Request $request) { diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php new file mode 100644 index 0000000..db69d02 --- /dev/null +++ b/app/Http/Controllers/CustomerController.php @@ -0,0 +1,50 @@ +check()) { + return redirect()->route('client.sign-in'); + } + } + + public function profile() + { + $area = 'customer'; + $title = __("Profile"); + $subtitle = 'You information'; + return view('client.default-list', compact('area', 'title', 'subtitle'));return auth('customer')->user(); + } + + public function save(Request $request){ + $request->validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255'], + 'mobile' => ['required', 'string', 'max:255'], + 'password' => ['nullable', 'string', 'min:8', 'confirmed'], + ]); + + $customer = auth('customer')->user(); + $customer->name = $request->name; + $customer->email = $request->email; + $customer->mobile = $request->mobile; + if ($request->has('password') && trim($request->input('password')) != ''){ + $customer->password = bcrypt($request->password); + } + $customer->save(); + return redirect()->route('client.profile')->with('message', __('Profile updated successfully')); + } + + public function invoice(Invoice $invoice){ + return $invoice; + } + +} diff --git a/app/Http/Requests/CustomerSaveRequest.php b/app/Http/Requests/CustomerSaveRequest.php index d9488b8..6da8477 100644 --- a/app/Http/Requests/CustomerSaveRequest.php +++ b/app/Http/Requests/CustomerSaveRequest.php @@ -24,7 +24,7 @@ class CustomerSaveRequest extends FormRequest return [ // 'name' => ['required', 'string', 'max:255'], - 'email' => ['required', 'string', 'email', 'max:255', 'unique:customers,email'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:customers,email,'.$this->id], 'password' => ['nullable', 'string', 'min:6', 'confirmed'], 'mobile'=> ['required', 'string', 'min:10'], ]; diff --git a/app/Models/Credit.php b/app/Models/Credit.php index efc4fa8..71b1798 100644 --- a/app/Models/Credit.php +++ b/app/Models/Credit.php @@ -7,5 +7,8 @@ use Illuminate\Database\Eloquent\Model; class Credit extends Model { - use HasFactory; + + public function invoice(){ + return $this->belongsTo(Invoice::class); + } } diff --git a/database/migrations/2024_05_07_134028_create_credits_table.php b/database/migrations/2024_05_07_134028_create_credits_table.php index edf5f96..12c6737 100644 --- a/database/migrations/2024_05_07_134028_create_credits_table.php +++ b/database/migrations/2024_05_07_134028_create_credits_table.php @@ -13,9 +13,9 @@ return new class extends Migration { Schema::create('credits', function (Blueprint $table) { $table->id(); - $table->unsignedBigInteger('amount'); + $table->bigInteger('amount'); $table->unsignedBigInteger('customer_id'); - $table->unsignedBigInteger('invoice_id'); + $table->unsignedBigInteger('invoice_id')->nullable(); $table->text('data')->nullable()->default(null); $table->softDeletes(); $table->timestamps(); diff --git a/public/assets/default/unknown.svg b/public/assets/default/unknown.svg new file mode 100644 index 0000000..58e8bb8 --- /dev/null +++ b/public/assets/default/unknown.svg @@ -0,0 +1,42 @@ + + + + diff --git a/resources/js/client-custom/tabControll.js b/resources/js/client-custom/tabControll.js new file mode 100644 index 0000000..1569d60 --- /dev/null +++ b/resources/js/client-custom/tabControll.js @@ -0,0 +1,16 @@ +document.addEventListener('DOMContentLoaded', function () { + if (document.querySelectorAll('.tab-control a').length > 0) { + document.querySelectorAll('.tab-control a')?.forEach(function (el) { + el.addEventListener('click', function () { + try { + document.querySelector('.tab-control a.active').classList.remove('active'); + this.classList.add('active'); + document.querySelector('.tab.active').classList.remove('active'); + document.querySelector(this.getAttribute('href')).classList.add('active'); + } catch { + } + + }); + }); + } +}); diff --git a/resources/sass/client-custom/_general.scss b/resources/sass/client-custom/_general.scss index 76e3e70..632e22e 100644 --- a/resources/sass/client-custom/_general.scss +++ b/resources/sass/client-custom/_general.scss @@ -78,3 +78,13 @@ body{ height: 25px; border: 1px solid gray; } + +#tabs-content{ + .tab{ + display: none; + + &.active{ + display: block; + } + } +} diff --git a/resources/views/admin/customers/customer-form.blade.php b/resources/views/admin/customers/customer-form.blade.php index 13ff2ee..81dd1d4 100644 --- a/resources/views/admin/customers/customer-form.blade.php +++ b/resources/views/admin/customers/customer-form.blade.php @@ -77,7 +77,7 @@ {{__('Credit')}} diff --git a/resources/views/segments/customer/AvisaCustomer/AvisaCustomer.blade.php b/resources/views/segments/customer/AvisaCustomer/AvisaCustomer.blade.php new file mode 100644 index 0000000..6a5214f --- /dev/null +++ b/resources/views/segments/customer/AvisaCustomer/AvisaCustomer.blade.php @@ -0,0 +1,340 @@ +
+
+
+ +
+ +
 
+
 
+ @include('components.err') +
+
+
+
+ +

+ {{number_format(auth('customer')->user()->invoices()->count())}} +

+

+ {{__("Invoices")}} +

+
+
+
+
+ +

+ {{__("Credits")}} +

+

+ {{number_format(auth('customer')->user()->credit)}} + {{config('app.currency.symbol')}} +

+
+
+
+
+ +

+ {{number_format(auth('customer')->user()->tickets()->count())}} +

+

+ {{__("Tickets")}} +

+
+
+
+
+ +

+ {{number_format(auth('customer')->user()->addresses()->count())}} +

+

+ {{__("Addresses")}} +

+
+
+
+ @if(cardCount() > 0) +
+ + {{__("Continue")}} + +
+ {{__("System notification")}} +
+ {{__("You have some products in your shopping card.")}} +
+
+ @endif + @if( auth('customer')->user()->name == null || trim(auth('customer')->user()->name) == '') +
+
+ {{__("System notification")}} +
+ {{__("Your information is insufficient, Please complete your information")}} +
+ @endif + @if( auth('customer')->user()->addresses()->count() == 0) +
+
+ {{__("System notification")}} +
+ {{__("You need at least one address to order, Please add address")}} +
+ @endif +
+
+ + + + + + + + + + @foreach(auth('customer')->user()->invoices as $inv) + + + + + + + + + @endforeach +
+ # + + {{__("Datetime")}} + + {{__("Orders count")}} + + {{__("Total price")}} + + {{__("Status")}} + + - +
+ {{$inv->hash}} + + {{$inv->created_at->ldate('Y-m-d H:i')}} + + {{number_format($inv->count)}} + + + {{number_format($inv->total_price)}} + {{config('app.currency.symbol')}} + + + + {{__($inv->status)}} + + + + + + @if($inv->status == 'PENDING') + + + {{__("Pay now")}} + + + @endif +
+
+
+
+ {{__("If you want to change the password, choose both the same. Otherwise, leave the password field blank.")}} +
+
+ @csrf +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+
+
+
+
+ +

+ {{__("Credits")}} +

+

+ {{number_format(auth('customer')->user()->credit)}} + {{config('app.currency.symbol')}} +

+ +
+
+
+ {{__("Credit history")}} +
+ @foreach(auth('customer')->user()->credits as $cr) +
+ @if($cr->invoice_id != null) + + + + @endif + [{{$cr->created_at->ldate('Y-m-d H:i')}}] + + {{number_format($cr->amount)}} {{config('app.currency.symbol')}} + + @php($data = json_decode($cr->data)) + @if(isset($data->message)) + + {{$data->message}} + + @endif +
+ @endforeach + {{-- WIP add credit manual--}} + +
+
+ + {{-- WIP tikets--}} +
+
+ + {{-- WIP comments--}} +
+
+ {{-- WIP submit new ticket --}} +
+
+ {{-- WIP submit new ticket --}} +
+
+
+
+
diff --git a/resources/views/segments/customer/AvisaCustomer/AvisaCustomer.js b/resources/views/segments/customer/AvisaCustomer/AvisaCustomer.js new file mode 100644 index 0000000..e69de29 diff --git a/resources/views/segments/customer/AvisaCustomer/AvisaCustomer.json b/resources/views/segments/customer/AvisaCustomer/AvisaCustomer.json new file mode 100644 index 0000000..69065ad --- /dev/null +++ b/resources/views/segments/customer/AvisaCustomer/AvisaCustomer.json @@ -0,0 +1,10 @@ +{ + "name": "AvisaCustomer", + "version": "1.0", + "author": "xStack", + "email": "xshop@xstack.ir", + "license": "GPL-3.0-or-later", + "url": "https:\/\/xstack.ir", + "author_url": "https:\/\/4xmen.ir", + "packages": [] +} \ No newline at end of file diff --git a/resources/views/segments/customer/AvisaCustomer/AvisaCustomer.php b/resources/views/segments/customer/AvisaCustomer/AvisaCustomer.php new file mode 100644 index 0000000..9df70d4 --- /dev/null +++ b/resources/views/segments/customer/AvisaCustomer/AvisaCustomer.php @@ -0,0 +1,21 @@ +name('card.discount'); Route::get('/card', [\App\Http\Controllers\CardController::class,'index'])->name('card'); Route::get('/cardClear',[\App\Http\Controllers\CardController::class,'clearing'])->name('card.clear'); - Route::get('/profile', [\App\Http\Controllers\ClientController::class,'profile'])->name('profile'); + Route::get('/profile', [\App\Http\Controllers\CustomerController::class,'profile'])->name('profile'); + Route::post('/profile/save', [\App\Http\Controllers\CustomerController::class,'save'])->name('profile.save'); + Route::get('/invoice/{invoice}', [\App\Http\Controllers\CustomerController::class,'invoice'])->name('invoice'); Route::get('/products', [\App\Http\Controllers\ClientController::class,'products'])->name('products'); Route::get('/attachments', [\App\Http\Controllers\ClientController::class,'attachments'])->name('attachments'); Route::get('/attachment/{attachment}', [\App\Http\Controllers\ClientController::class,'attachment'])->name('attachment');