diff --git a/app/Http/Controllers/Admin/SettingsController.php b/app/Http/Controllers/Admin/SettingsController.php new file mode 100644 index 0000000..64ba5f3 --- /dev/null +++ b/app/Http/Controllers/Admin/SettingsController.php @@ -0,0 +1,41 @@ +select('id','title_fa', 'key','value','description','is_active')->get(); + return response()->json($Setting); + } + public function edit(Request $request) + { + // Check if the setting exists + $setting = Setting::where('key', $request->key)->first(); + + if ($setting) { + // Update the existing setting + $setting->value = $request->value; + $setting->description = $request->description; + $setting->is_active = $request->is_active; + $setting->save(); + } else { + // Create a new setting + $setting = new Setting(); + $setting->key = $request->key; + $setting->value = $request->value; + $setting->description = $request->description; + $setting->is_active = $request->is_active; + $setting->save(); + } + + // Return the setting as a JSON response + return response()->json($setting); + } + +} diff --git a/app/Http/Controllers/Admin/TahesabController.php b/app/Http/Controllers/Admin/TahesabController.php index 012c0c4..b7bcc33 100644 --- a/app/Http/Controllers/Admin/TahesabController.php +++ b/app/Http/Controllers/Admin/TahesabController.php @@ -8,52 +8,80 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Http; use App\Models\Tahesab; use App\Models\Customer; +use Morilog\Jalali\Jalalian; use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException; use Hekmatinasser\Verta\Verta; class TahesabController extends Controller { - public function store() + public function create_user($customer_id) { - $customer = auth()->user(); - if (!$customer) { - throw new UnprocessableEntityHttpException("Auth needed"); - } - $customer = Customer::where('id', $customer->id)->first(); - if ($customer && ($customer->moshtari_code !== null)) { - return "customer exists"; - } - try { - $response = Http::withoutVerifying()->timeout(10)->withHeaders([ - 'DBName' => $this->Config('tahesab_db'), - 'Content-Type' => 'application/json', - 'Authorization' => "Bearer " . $this->Config('tahesab_token'), - ])->post('https://185.252.86.194:8081', [ - "DoNewMoshtari" => [ - $customer->name, - $this->Config('name_fa'), - $customer->mobile, - "", - $customer->n_code ?? "", - $customer->birth_date ?? "", // !== null ? jalalian::fromCarbon(Carbon::parse($customer->birth_date))->format('Y/m/d') : null, - "", - "", - -1, - 0 // tala - ] - ]); - } catch (\Exception $e) { - return $e->getMessage(); + $customer = Customer::findOrFail($customer_id); + + if ($customer && ($customer->moshtari_code == null)) { + try { + $response = Http::withoutVerifying()->timeout(10)->withHeaders([ + 'DBName' => $this->Config('tahesab_db'), + 'Content-Type' => 'application/json', + 'Authorization' => "Bearer " . $this->Config('tahesab_token'), + ])->post((string)env('TAHESAB'), [ + "DoNewMoshtari" => [ + (string)$customer->name, + $this->Config('name_fa'), + (string)$customer->mobile, + "", + "", + "", + "", + "", + -1, + 0 + ] +//{"DoNewMoshtari":["Name", "GroupName", "Tel", "Address", "CodeMeli", "Tarikh_Tavalod", "Moaref", "Code_Moaref", Moshtari_Code, Jens_Felez]} + ]); + if (!empty($response['OK'])) { + $customer->moshtari_code = $response['OK']; + $customer->save(); + } + } catch (\Exception $e) { + return $e->getMessage(); + } + }else { + if($customer && $customer->birth_date !== null){ + $birth_date = Verta::instance(Carbon::parse($customer->birth_date))->format('Y-m-d'); + } + try { + $response = Http::withoutVerifying()->timeout(10)->withHeaders([ + 'DBName' => $this->Config('tahesab_db'), + 'Content-Type' => 'application/json', + 'Authorization' => "Bearer " . $this->Config('tahesab_token'), + ])->post((string)env('TAHESAB'), [ + "DoEditMoshtari" => [ + $customer->name, + $this->Config('name_fa'), + $customer->mobile, + "", + $customer->n_code ?? "", + $birth_date ?? "", + "", + "", + (int)$customer->moshtari_code, + 0 // tala + ] +//{"DoEditMoshtari":["Name","GroupName", "Tel", "Address", "CodeMeli", "Tarikh_Tavalod", "Moaref", "Code_Moaref", Moshtari_Code]} + ]); + } catch (\Exception $e) { + return response($e->getMessage(), 500); + } + } if (empty($response['OK'])) { return "tahesab api error!!!"; } - $customer->moshtari_code = $response['OK']; - $customer->save(); return true; @@ -87,7 +115,7 @@ class TahesabController extends Controller } $date = Verta::instance(Carbon::parse($data['pay_at']))->format('Y-m-d'); [$year, $month, $day] = explode('-', $date); - + $amount = $data['amount']; $tahesab = Tahesab::create([ @@ -104,7 +132,7 @@ class TahesabController extends Controller 'DBName' => $this->Config('tahesab_db'), 'Content-Type' => 'application/json', 'Authorization' => "Bearer " . $this->Config('tahesab_token'), - ])->post('https://185.252.86.194:8081', [ + ])->post((string)env('TAHESAB'), [ "DoNewSanadBuySaleGOLD" => [ 1,//Sabte_Kol_Or_Movaghat_1_0 (int)$customer->moshtari_code, //Moshtari_Code @@ -187,7 +215,7 @@ class TahesabController extends Controller 'DBName' => $this->Config('tahesab_db'), 'Content-Type' => 'application/json', 'Authorization' => "Bearer " . $this->Config('tahesab_token'), - ])->post('https://185.252.86.194:8081', [ + ])->post((string)env('TAHESAB'), [ "DoNewSanadVKHBank" => [ 1,//Sabte_Kol_Or_Movaghat_1_0 $customer->moshtari_code,//Moshtari_Code diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 8ce4487..b945600 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -7,6 +7,7 @@ use App\Http\Controllers\SuperController; use App\Models\Permission; use App\Models\User; use Illuminate\Http\Request; +use App\Models\Setting; class UserController extends SuperController { @@ -29,6 +30,9 @@ class UserController extends SuperController ->findOrFail(auth()->id()); // $permission = Permission::where('user_type',$user->user_type)->select('rid')->distinct('rid')->get()->pluck('rid')->toArray(); // $user['permission'] = $permission; + $query = Setting::query(); + $settings = $query->get(); + $user->settings= $settings; return response()->json($user); } diff --git a/app/Http/Controllers/Admin/WalletController.php b/app/Http/Controllers/Admin/WalletController.php index c4022cf..3e68a23 100644 --- a/app/Http/Controllers/Admin/WalletController.php +++ b/app/Http/Controllers/Admin/WalletController.php @@ -18,6 +18,7 @@ use Rooyesh\Wallet\models\Transaction; use Rooyesh\Wallet\models\Wallet; use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException; use App\Http\Controllers\Admin\TahesabController; +use App\Models\Setting; class WalletController extends Controller @@ -117,9 +118,16 @@ class WalletController extends Controller 'active' => true ], 7, true, $deposit, $gold_block); - $data['direction'] = 0; -// $tahesab = new TahesabController(); -// $tahesab->wallet($data); + if(Setting::where('key', 'send_to_tahesab')->first()->value == "true"){ + try { + $data['direction'] = 0; + $tahesab = new TahesabController(); + $tahesab->wallet($data); + }catch (\Exception $e){ + return response($e->getMessage(), 500); + } + } + $status = $data['value'] > 0 ?" شارژ شد ": " کسر شد "; $message = 'کیف پول شما به اندازه ' . number_format(abs($data['value'])) . " ریال در تاریخ " . verta()->format('Y/n/j H:i:s') .$status . "بابت" . "\n" . $data['note'] diff --git a/app/Http/Controllers/Auth/AuthController.php b/app/Http/Controllers/Auth/AuthController.php index 0323cdc..4b9f20b 100644 --- a/app/Http/Controllers/Auth/AuthController.php +++ b/app/Http/Controllers/Auth/AuthController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Auth; +use App\Http\Controllers\Admin\TahesabController; use App\Http\Controllers\Controller; use App\Models\Cnt; use App\Models\Customer; @@ -160,6 +161,12 @@ class AuthController extends Controller $data['active'] = true; // Create customer $customer = Customer::create($data); + +// $tah = new TahesabController(); +// return $tah->store([ +// 'customer_id' => $customer->id, +// ]); + $message = "{$data['name']} عزیز، اکانت شما در پلتفرم {$this->Config('name_fa')} ایجاد شد.\nنام کاربری: {$data['mobile']}\n\nورود به نرم افزار:\n{$this->Config('app_url')}"; $this->Send($data['mobile'], $message); diff --git a/app/Http/Controllers/Customer/CustomerController.php b/app/Http/Controllers/Customer/CustomerController.php index 6b50af1..b18f512 100644 --- a/app/Http/Controllers/Customer/CustomerController.php +++ b/app/Http/Controllers/Customer/CustomerController.php @@ -18,6 +18,7 @@ use Rooyesh\Wallet\models\Transaction; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Http; use App\Models\Setting; +use App\Http\Controllers\Admin\TahesabController; //use App\Models\Price; @@ -102,6 +103,9 @@ class CustomerController extends Controller $updateData['credential_id'] = $request->credential_id; } $customer->update($updateData); + +// $tah = new TahesabController(); +// $tah->store(["customer_id" => $customer->id]); if (!$customer->is_legal) { $response = Http::withHeaders([ diff --git a/app/Http/Controllers/Single/SingleOrderController.php b/app/Http/Controllers/Single/SingleOrderController.php index 89a7825..92e7d11 100644 --- a/app/Http/Controllers/Single/SingleOrderController.php +++ b/app/Http/Controllers/Single/SingleOrderController.php @@ -21,6 +21,7 @@ use Rooyesh\Wallet\models\Wallet; use App\Models\TransactionsAdmin; use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException; use Illuminate\Support\Facades\Http; +use App\Models\Setting; class SingleOrderController extends Controller @@ -36,8 +37,19 @@ class SingleOrderController extends Controller $data['all_price'] = $latestPrice; $data['price'] = $latestPrice->price; $data['price_id'] = $latestPrice->id; - $data['difference'] = config('fee.cash'); - $data['service_charge_percentage'] = config('fee.service_charge_percentage'); +// $data['difference'] = config('fee.cash'); + $data['difference'] = Setting::where('key', 'fee_cash')->first()->value; +// $data['service_charge_percentage'] = config('fee.service_charge_percentage'); + $data['service_charge_percentage'] = Setting::where('key', 'fee_service_charge_percentage')->first()->value; + + $fee_free = Setting::where('key', 'fee_free')->where('is_active', true)->value('value'); + + if($fee_free && $this->feeFree($data['customer_id'], $fee_free)){ + $data['service_charge_percentage'] = 0; + $data['difference'] = 0; + $data['fee_free'] = true; + } + $data['pay_at'] = (new \DateTime())->format('Y-m-d H:i:s'); } else if (auth('user')->id()) {//admin $data['service_charge_percentage'] = 0; @@ -62,6 +74,13 @@ class SingleOrderController extends Controller $data['difference'] = $data['fee'] = $data['product']['cash_fee_buy']; $data['total_price_original'] = $data['product']['amount'] * ($data['price_original'] ?? 0); + $fee_free = Setting::where('key', 'fee_free')->where('is_active', true)->value('value'); + + if($fee_free && $this->feeFree($data['customer_id'], $fee_free)){ + $data['service_charge_percentage'] = 0; + $data['difference'] = 0; + } + // Check if the method is cash if ($data['method'] == "cash") { $response['buy'] = $this->processBuyTransactionProduct($data, $wallet, $wallet_interface); @@ -76,6 +95,12 @@ class SingleOrderController extends Controller $data['difference'] = $data['fee'] = $data['product']['cash_fee_sell']; $data['total_price_original'] = $data['product']['amount'] * ($data['price_original'] ?? 0); + $fee_free = Setting::where('key', 'fee_free')->where('is_active', true)->value('value'); + + if($fee_free && $this->feeFree($data['customer_id'], $fee_free)){ + $data['service_charge_percentage'] = 0; + $data['difference'] = 0; + } // Check if the method is cash if ($data['method'] == "cash") { $response['sell'] = $this->processSellTransactionProduct($data, $wallet, $wallet_interface); @@ -87,7 +112,7 @@ class SingleOrderController extends Controller } else { // Calculate total price and fee for non-product (gold) transaction $data['total_price_original'] = $data['amount'] * ($data['price_original'] ?? 0); - $data['total_fee'] = $data['amount'] * $data['difference']; + $data['total_fee'] = $data['amount'] * ($data['difference'] == 0 ? 1 : $data['difference']); $data['product'] = Product::find(13); // Check if the user wants to buy if ($data['direction'] == 1) { @@ -103,13 +128,14 @@ class SingleOrderController extends Controller $response['sell'] = $this->processSellTransaction($data, $wallet, $wallet_interface); } } -// try { -// $tahesab = new TahesabController(); -// $data['tahesab'] = $tahesab->storeTrade($data); -// }catch (\Exception $e){ -// return response($e->getMessage(), 500); -// } - + if(Setting::where('key', 'send_to_tahesab')->first()->value == "true"){ + try { + $tahesab = new TahesabController(); + $data['tahesab'] = $tahesab->storeTrade($data); + }catch (\Exception $e){ + return response($e->getMessage(), 500); + } + } // $response['reward'] = $this->give_order_reward($data, $wallet, $wallet_interface); $response['Notifications'] = $this->sendTransactionNotifications($data, $transactionType); return response()->json([$response, $data]); @@ -159,7 +185,7 @@ class SingleOrderController extends Controller private function processBuyTransactionProduct(&$data, $wallet, $wallet_interface) { - + $data['price'] = $data['product']["price"]; $data['price'] += $data['difference']; $data['amount'] = $data['number'] * $data['product']['amount']; $data['total_amount'] = $data['amount']+($data['product']['percent_fee_buy']*$data['amount']); @@ -266,6 +292,7 @@ class SingleOrderController extends Controller private function processSellTransactionProduct(&$data, $wallet, $wallet_interface) { + $data['price'] = $data['product']["price"]; $data['price'] -= $data['difference']; $data['amount'] = $data['number'] * $data['product']['amount']; $data['total_amount'] = $data['amount']-($data['product']['percent_fee_sell']*$data['amount']) ; @@ -538,4 +565,13 @@ class SingleOrderController extends Controller ])->export($records); return response()->json($records); } + + private function feeFree($customer_id, $count) + { + return Order::where('customer_id', $customer_id) + ->where('type', 2) + ->where('sts', 2) + ->where('payment_sts', 4) + ->count() < (int)$count; + } } diff --git a/app/Http/Controllers/Site/ReportController.php b/app/Http/Controllers/Site/ReportController.php index 3be6cb5..6fd46e1 100644 --- a/app/Http/Controllers/Site/ReportController.php +++ b/app/Http/Controllers/Site/ReportController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Admin\PriceController; use App\Http\Controllers\Controller; use App\Mail\YourMailableClass; use App\Models\Cnt; +use App\Models\Setting; use App\Models\ConfigStatic; use App\Models\Customer; use App\Models\Price; @@ -18,6 +19,7 @@ use Illuminate\Support\Arr; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Mail; use Morilog\Jalali\Jalalian; +use App\Http\Controllers\Admin\ProductController; class ReportController extends Controller { @@ -43,7 +45,8 @@ class ReportController extends Controller public function updatePrise() { - $difference = config('fee.single'); +// $difference = config('fee.single'); + $difference = Setting::where('key', 'fee_single')->first()->value; $lastPrice = Price::latest()->first(); $PriceTriggers = PriceTrigger::where("is_active", true)->get(); foreach ($PriceTriggers as $PriceTrigger) { @@ -71,7 +74,8 @@ class ReportController extends Controller public function upDownPrice() { - $difference = config('fee.single'); +// $difference = config('fee.single'); + $difference = Setting::where('key', 'fee_single')->first()->value; $today = Carbon::now()->format("Y-m-d"); $prises = Price::where('date_at', $today)->get("price"); @@ -119,7 +123,8 @@ class ReportController extends Controller public function lastPrice() { - $difference = config('fee.single'); +// $difference = config('fee.single'); + $difference = Setting::where('key', 'fee_single')->first()->value; // try { @@ -127,9 +132,20 @@ class ReportController extends Controller // } catch (\Exception $e) {$tala_ir = 0;} $main_product_id = Cnt::where('key', 'main_product')->first()['value']; + $refpricer = new ProductController(); + if ($refpricer->getPrice()) { + $ref = true; + } else { + $ref = false; + } $pr_product = Product::find($main_product_id); - - $priceValue = $pr_product['price'] + $pr_product['price_profit'];//$tala_ir;//4000 + + try { + $taban_gohar = Http::timeout(2)->get('https://tabangohar.com/GheymatKhan/prices_in_table.html')->json(); + $tgn = (int)$taban_gohar['c']*10; + }catch (\Exception $e){$tgn = 0;} + + $priceValue = $tgn !== 0 ? $tgn : $pr_product['price'] + $pr_product['price_profit'];//$tala_ir;//4000 $lastPrice = Price::latest()->first(); if (!$lastPrice || $lastPrice->price != $priceValue and $priceValue > 30000000) { $price = new Price(); @@ -167,7 +183,9 @@ class ReportController extends Controller // 'henzagold' => $henzagold_18, // 'Ounce' => $henzagold_ons_gold, // 'milli' => $milli, - 'main_product' => $pr_product['price'] + $pr_product['price_profit'] + 'main_product' => $pr_product['price'] + $pr_product['price_profit'], + 'taban_gohar' => $tgn, + 'refpricer' => $ref ]; } else { return []; diff --git a/app/Http/Middleware/ValidationMiddleware.php b/app/Http/Middleware/ValidationMiddleware.php index 53c20ae..24a68f4 100644 --- a/app/Http/Middleware/ValidationMiddleware.php +++ b/app/Http/Middleware/ValidationMiddleware.php @@ -19,6 +19,11 @@ class ValidationMiddleware public function handle(Request $request, Closure $next) { if($request->acceptsJson()){ + //convert fa digits to en digits + $allData = array_merge($request->all(), $request->query()); + $converted = $this->fa2en_numbers($allData); + $request->merge($converted); + $method = $request->getMethod(); $path =$request->path(); if(preg_match('/[0-9]+$/',$request->path(),$match)) { @@ -46,4 +51,16 @@ class ValidationMiddleware } throw new BadRequestHttpException(); } + private function fa2en_numbers($input) { + if (is_string($input)) { + $fa_numbers = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹']; + $en_numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; + return str_replace($fa_numbers, $en_numbers, $input); + } elseif (is_array($input)) { + return array_map([$this, __FUNCTION__], $input); + } else { + return $input; + } + } + } diff --git a/app/Models/Setting.php b/app/Models/Setting.php index 4ec3f53..05eaf7b 100644 --- a/app/Models/Setting.php +++ b/app/Models/Setting.php @@ -4,18 +4,24 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Foundation\Auth\User as Authenticatable; +use Illuminate\Support\Facades\Hash; +use Rooyesh\Wallet\models\Transaction; +use Tymon\JWTAuth\Contracts\JWTSubject; class Setting extends Model { - use HasFactory; - protected $table = 'settings'; + use HasFactory,Selector; protected $fillable = [ 'key', 'title_fa', + 'is_active', + 'description', 'value', 'value_json' ]; protected $casts = [ - 'value_json'=>'array' + 'value_json'=>'array', + 'is_active'=>'boolean', ]; } diff --git a/composer.json b/composer.json index d4b8bce..41c8f8b 100644 --- a/composer.json +++ b/composer.json @@ -12,9 +12,7 @@ "laravel/framework": "^8.75", "laravel/sanctum": "^2.11", "laravel/tinker": "^2.5", - "tymon/jwt-auth": "^1.0", - "morilog/jalali": "^3.4" - }, + "tymon/jwt-auth": "^1.0"}, "require-dev": { "facade/ignition": "^2.5", "fakerphp/faker": "^1.9.1", diff --git a/routes/admin.php b/routes/admin.php index 6b00928..d29095a 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -15,14 +15,24 @@ use App\Http\Controllers\Customer\PriceTriggerController; use App\Http\Controllers\Finance\FinanceController; use App\Http\Controllers\Admin\ProductController; use App\Http\Controllers\Admin\TahesabController; +<<<<<<< HEAD use App\Http\Controllers\Admin\FileController; use App\Http\Controllers\Site\OfferCodesController; +======= +use App\Http\Controllers\Admin\SettingsController; + +>>>>>>> a0a788ce53f1b3dff84bd16f3b7db585071bc159 Route::middleware('auth:user')->group(function (){ Route::middleware('validation')->group(function (){ Route::get('/p', function () { return Http::get('https://pricing.liman.gold/pricingApi', [])->json(); }); + + //settigs + Route::get('get_settings',[SettingsController::class, 'index']); + Route::post('get_settings',[SettingsController::class, 'edit']); + //------------balence Route::post('getBalance', [DashboardController::class, 'getBalance']); //------------PriceTrigger @@ -135,15 +145,5 @@ Route::middleware('auth:user')->group(function (){ return "OK"; } ); - - //file - Route::post('/file',[FileController::class, 'store']); - - //Offer codes - Route::post('/offer_code/table',[OfferCodesController::class, 'table']); - Route::post('/offer_code',[OfferCodesController::class, 'store']); - Route::resource('/offer_code',OfferCodesController::class); - - }); });