diff --git a/app/Classes/Modules/Anthropic/Services/CreatesClaudeResponse.php b/app/Classes/Modules/Anthropic/Services/CreatesClaudeResponse.php index de4136f4..2f01789d 100644 --- a/app/Classes/Modules/Anthropic/Services/CreatesClaudeResponse.php +++ b/app/Classes/Modules/Anthropic/Services/CreatesClaudeResponse.php @@ -30,7 +30,7 @@ class CreatesClaudeResponse 'anthropic-version' => config('anthropic.api_version', '2023-06-01'), 'Content-Type' => 'application/json', ])->post(config('anthropic.base_url') . '/v1/messages', [ - 'model' => config('anthropic.default_model', 'claude-sonnet-4-5-20250929'), + 'model' => !empty($model) ? $model : config('anthropic.default_model', 'claude-sonnet-4-5-20250929'), 'max_tokens' => 8192, 'messages' => [ [ diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/DeletePackingListByPackageIdLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/DeletePackingListByPackageIdLogic.php index 9f6949e0..5ee1a008 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/DeletePackingListByPackageIdLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/DeletePackingListByPackageIdLogic.php @@ -4,6 +4,7 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; +use App\Classes\Jobs\Commands\V2\YD\FetchPackingListsFromYdPortalV2CommandJob; use App\Classes\Modules\PackingLists\Services\DeletesPackingList; use App\Classes\Modules\PackingLists\Services\FetchesPackingList; use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage; @@ -11,6 +12,7 @@ use App\Classes\Modules\PackingLists\Standards\Rules\CanDeletePackingList; use App\Classes\ValueObjects\Constants\PackingListType; use App\Classes\ValueObjects\Constants\TransactionType; use App\Models\PackingList; +use Carbon\Carbon; use ErrorException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -84,7 +86,35 @@ class DeletePackingListByPackageIdLogic extends AbstractControllerLogic $childPackingList->each->delete(); + $jobs1 = $this->fetchPackingListsFromYdPortalV2CommandJobs(); + foreach ($jobs1 as $index => $job) { + dispatch($job)->delay(now()->addSeconds($index * 2)); + } + return $this->response([]); } + + private function fetchPackingListsFromYdPortalV2CommandJobs() + { + $jobs = []; + $count = 0; + + // Always take last 10 days INCLUDING today + for ($x = 0; $x < 10; $x++) { + + $startDate = Carbon::today()->subDays($x)->startOfDay(); + $endDate = Carbon::today()->subDays($x - 1)->startOfDay(); + + $jobs[] = new FetchPackingListsFromYdPortalV2CommandJob($startDate, $endDate); + + Log::info('Dispatched FetchPackingListsFromYdPortalV2CommandJob for start date: ' . $startDate . ', end date: ' . $endDate); + $count++; + } + + Log::info('Total FetchPackingListsFromYdPortalV2CommandJob dispatched: ' . $count); + + return $jobs; + } + } diff --git a/app/Classes/Modules/PackingLists/Processors/V2/FetchByTrakingNoYdPortalV2Processor.php b/app/Classes/Modules/PackingLists/Processors/V2/FetchByTrakingNoYdPortalV2Processor.php index b50520a0..f70d5e88 100644 --- a/app/Classes/Modules/PackingLists/Processors/V2/FetchByTrakingNoYdPortalV2Processor.php +++ b/app/Classes/Modules/PackingLists/Processors/V2/FetchByTrakingNoYdPortalV2Processor.php @@ -221,13 +221,19 @@ class FetchByTrakingNoYdPortalV2Processor {$remark} What are the ETA and ETD?"; Log::info('prompt: '.$userPrompt); - $result = $this->createsClaudeResponse->execute($userPrompt); + $result = $this->createsClaudeResponse->execute($userPrompt, 'claude-haiku-4-5-20251001'); Log::info('result (json_encoded): '.json_encode($result)); // $content = $result['choices'][0]['message']['content'] ?? null; $content = $result['content'][0]['text'] ?? '[]'; - Log::info('content (json_encoded):'. json_encode($content)); - if ($content) { - $parsedContent = json_decode($content, true); + + Log::info('raw ETA/ETD content: ' . $content); + + // Remove markdown code fences if they exist + $contentClean = preg_replace('/^```json\s*|\s*```$/', '', $content); + $contentClean = trim($contentClean); + + if ($contentClean) { + $parsedContent = json_decode($contentClean, true); // $parsedContent = json_decode(str_replace("'", '"', $content), true); if (is_array($parsedContent) && isset($parsedContent['ETA'], $parsedContent['ETD'])) { @@ -327,22 +333,46 @@ class FetchByTrakingNoYdPortalV2Processor private function translateTracking($textToTranslate) { - $userPrompt = "Please translate mandarin to english and return result in this format, e.g. {'mandarin': '.$textToTranslate.', 'english': ''}. ".$textToTranslate." "; - Log::info('prompt: '.$userPrompt); - $result = $this->createsClaudeResponse->execute($userPrompt); - Log::info('result (json_encoded): '.json_encode($result)); - // $content = $result['choices'][0]['message']['content'] ?? null; - $content = $result['content'][0]['text'] ?? '[]'; - Log::info('content (json_encoded):'. json_encode($content)); - $parsedContent = json_decode(str_replace("'", '"', $content), true); + // Return null immediately if no Mandarin character is present + if (!preg_match('/\p{Han}/u', $textToTranslate)) { + Log::info('No Mandarin characters detected, skipping translation.'); + return null; + } - if($parsedContent && $parsedContent['english']){ + $userPrompt = "Translate the following Mandarin text to English. + + You must respond with raw JSON only. + No explanations. + No markdown. + No code fences. + No comments. + Only this JSON structure: + + {\"mandarin\": \"".$textToTranslate."\", \"english\": \"\"} + + Text: ".$textToTranslate; + + Log::info('prompt: '.$userPrompt); + $result = $this->createsClaudeResponse->execute($userPrompt, 'claude-haiku-4-5-20251001'); + + Log::info('result (json_encoded): '.json_encode($result)); + + $content = $result['content'][0]['text'] ?? '[]'; + Log::info('raw content: ' . $content); + + // Remove markdown code fences if they exist + $contentClean = preg_replace('/^```json\s*|\s*```$/', '', $content); + $contentClean = trim($contentClean); + + // Decode JSON safely + $parsedContent = json_decode($contentClean, true); + + if($parsedContent && isset($parsedContent['english'])){ Log::info('Translated Text: ' . $parsedContent['english']); return $parsedContent['english']; } - else{ - return null; - } + + return null; } } diff --git a/app/Classes/Modules/PackingLists/Processors/V2/FetchPackingListsFromYdPortalV2Processor.php b/app/Classes/Modules/PackingLists/Processors/V2/FetchPackingListsFromYdPortalV2Processor.php index 53c9db9a..548a5d21 100644 --- a/app/Classes/Modules/PackingLists/Processors/V2/FetchPackingListsFromYdPortalV2Processor.php +++ b/app/Classes/Modules/PackingLists/Processors/V2/FetchPackingListsFromYdPortalV2Processor.php @@ -158,6 +158,7 @@ class FetchPackingListsFromYdPortalV2Processor $packingListReference = $row->expressno; try{ + Log::info('Fetch SHIPPING_PACKING_LIST expressno: ' . $row->expressno); $packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno, 'type' => PackingListType::SHIPPING_PACKING_LIST]); Log::info('Fetch SHIPPING_PACKING_LIST id: ' . $packingList->id); diff --git a/resources/assets/vue/components/accounts/forms/ResetPasswordFormComponent.vue b/resources/assets/vue/components/accounts/forms/ResetPasswordFormComponent.vue index 417e4be0..34245909 100644 --- a/resources/assets/vue/components/accounts/forms/ResetPasswordFormComponent.vue +++ b/resources/assets/vue/components/accounts/forms/ResetPasswordFormComponent.vue @@ -3,15 +3,15 @@
-
+
-
+
{{error}}
@@ -101,4 +101,4 @@ mixins: [request] } - \ No newline at end of file + diff --git a/resources/views/pages/accounts/reset_password.blade.php b/resources/views/pages/accounts/reset_password.blade.php index 4fae44b7..c624eb7d 100644 --- a/resources/views/pages/accounts/reset_password.blade.php +++ b/resources/views/pages/accounts/reset_password.blade.php @@ -17,12 +17,16 @@
-
+
Reset your password
- +
+
+ +
+
@@ -47,7 +51,7 @@
-
+
@@ -71,4 +75,4 @@
-@endsection \ No newline at end of file +@endsection