456 Commits

Author SHA1 Message Date
fbf3edb3eb Merge pull request 'ranjith-dev' (#918) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 41s
Reviewed-on: #918
2026-08-21 04:03:12 +00:00
dhanabalan
54d2f7d055 Added store before test readings post api function with validations
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 29s
Laravel Pint / pint (pull_request) Successful in 3m53s
Laravel Larastan / larastan (pull_request) Failing after 4m39s
2026-08-21 09:32:09 +05:30
dhanabalan
e1bf0a2066 Added before test reading resource files and exporter file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
2026-08-21 09:24:46 +05:30
dhanabalan
a13fb8330c Added before test reading model files for hasMany relations
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
2026-08-21 09:20:12 +05:30
dhanabalan
70848bb10a Removed unwanted empty line
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
2026-08-21 09:00:21 +05:30
dhanabalan
a6d28a035b Added before test reading policies and model file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
2026-08-21 08:56:33 +05:30
dhanabalan
d38f1c9e87 Added before test reading migration file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
2026-08-21 08:52:34 +05:30
dhanabalan
08c104ded9 Added store before test readings post api route
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
2026-08-21 08:47:05 +05:30
6be40f4ee4 Merge pull request 'Added new testing motor master api' (#917) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 51s
Reviewed-on: #917
2026-08-20 11:29:28 +00:00
dhanabalan
2f51007531 Added new testing motor master api
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 28s
Laravel Pint / pint (pull_request) Successful in 3m8s
Laravel Larastan / larastan (pull_request) Failing after 5m19s
2026-08-20 16:57:38 +05:30
32fa892318 Merge pull request 'solved filter of item code logic in panel box validations page' (#916) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 31s
Reviewed-on: #916
2026-08-20 09:03:36 +00:00
dhanabalan
98daa2fd7e solved filter of item code logic in panel box validations page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m55s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 23s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 53s
Laravel Pint / pint (pull_request) Successful in 3m40s
Laravel Larastan / larastan (pull_request) Failing after 4m57s
2026-08-20 14:33:17 +05:30
43b271bf1b Merge pull request 'Added panel box validations relation in sticker master model file' (#915) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #915
2026-08-20 09:01:10 +00:00
dhanabalan
02f0dce6aa Added panel box validations relation in sticker master model file
Some checks failed
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 30s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 27s
Laravel Pint / pint (pull_request) Successful in 3m11s
Laravel Larastan / larastan (pull_request) Failing after 5m52s
2026-08-20 14:30:54 +05:30
88ad090a4e Merge pull request 'Added item id in query to fetch characteristics master' (#914) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m18s
Reviewed-on: #914
2026-08-20 08:45:47 +00:00
dhanabalan
f9481275db Added item id in query to fetch characteristics master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 39s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 53s
Laravel Pint / pint (pull_request) Successful in 4m39s
Laravel Larastan / larastan (pull_request) Failing after 13m15s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Failing after 13m30s
2026-08-20 14:15:18 +05:30
cc6395986b Merge pull request 'Added select for not ok button in panel check list livewire page' (#913) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Reviewed-on: #913
2026-08-20 03:52:03 +00:00
dhanabalan
579daf6a83 Added select for not ok button in panel check list livewire page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 27s
Laravel Larastan / larastan (pull_request) Failing after 5m19s
Laravel Pint / pint (pull_request) Successful in 4m41s
2026-08-20 09:21:48 +05:30
70f279e04e Merge pull request 'ranjith-dev' (#912) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #912
2026-08-20 03:49:26 +00:00
dhanabalan
38dc55ac7c Added panel box validation importer and exporter
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 42s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 34s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 30s
Laravel Pint / pint (pull_request) Successful in 1m55s
Laravel Larastan / larastan (pull_request) Failing after 5m20s
2026-08-20 09:19:05 +05:30
dhanabalan
3b890374e0 Added inspection lot number in panel box validation resource page
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
2026-08-20 09:18:05 +05:30
901058500d Merge pull request 'ranjith-dev' (#911) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Reviewed-on: #911
2026-08-20 03:44:54 +00:00
dhanabalan
9f2ffa46ce Added inspection lot number column in panel box validation model file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 27s
Laravel Pint / pint (pull_request) Successful in 1m57s
Laravel Larastan / larastan (pull_request) Failing after 5m31s
2026-08-20 09:14:34 +05:30
dhanabalan
e9657caeb4 Added inspection lot number column in panel box validation table
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
2026-08-20 09:13:03 +05:30
2f06ffa665 Merge pull request 'Changed label name of the column name in panel gr master resource page' (#910) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Reviewed-on: #910
2026-08-19 09:45:39 +00:00
dhanabalan
3d764e0032 Changed label name of the column name in panel gr master resource page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 22s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 31s
Laravel Pint / pint (pull_request) Successful in 3m2s
Laravel Larastan / larastan (pull_request) Failing after 5m34s
2026-08-19 15:14:32 +05:30
f063393a55 Merge pull request 'Added inspection lot number in production characteristic resource page' (#909) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 31s
Reviewed-on: #909
2026-08-18 11:40:56 +00:00
dhanabalan
e0168b90b4 Added inspection lot number in production characteristic resource page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 31s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 27s
Laravel Pint / pint (pull_request) Successful in 4m5s
Laravel Larastan / larastan (pull_request) Failing after 4m32s
2026-08-18 17:10:37 +05:30
f7d438998e Merge pull request 'Added inspection lot number column in production characteristic table' (#908) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m4s
Reviewed-on: #908
2026-08-18 11:36:25 +00:00
dhanabalan
292ff86e39 Added inspection lot number column in production characteristic table
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 31s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 31s
Laravel Pint / pint (pull_request) Successful in 1m54s
Laravel Larastan / larastan (pull_request) Failing after 4m3s
2026-08-18 17:05:47 +05:30
b277ecdfaa Merge pull request 'Added doc no label name in production characteristic resource page' (#907) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 41s
Reviewed-on: #907
2026-08-18 11:32:09 +00:00
dhanabalan
eaebee8336 Added doc no label name in production characteristic resource page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 27s
Laravel Pint / pint (pull_request) Successful in 1m54s
Laravel Larastan / larastan (pull_request) Failing after 4m15s
2026-08-18 17:01:50 +05:30
a9e819e503 Merge pull request 'added logic of inspection lot number in panel gr master importer' (#906) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Reviewed-on: #906
2026-08-18 11:22:37 +00:00
dhanabalan
d50171154f added logic of inspection lot number in panel gr master importer
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 55s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 31s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 29s
Laravel Pint / pint (pull_request) Successful in 3m57s
Laravel Larastan / larastan (pull_request) Failing after 4m28s
2026-08-18 16:52:24 +05:30
1312569d44 Merge pull request 'added column in panel gr master exporter' (#905) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #905
2026-08-18 11:19:45 +00:00
dhanabalan
dac7cd4034 added column in panel gr master exporter
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 28s
Laravel Pint / pint (pull_request) Successful in 1m57s
Laravel Larastan / larastan (pull_request) Failing after 3m40s
2026-08-18 16:49:28 +05:30
f71e73e4fe Merge pull request 'Added inspection lot number column in panel gr master' (#904) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #904
2026-08-18 11:17:57 +00:00
dhanabalan
34c143ba13 Added inspection lot number column in panel gr master
Some checks failed
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 26s
Laravel Pint / pint (pull_request) Successful in 3m33s
Laravel Larastan / larastan (pull_request) Failing after 4m47s
2026-08-18 16:47:38 +05:30
c49e53d51c Merge pull request 'Added created by and updated by column in production characteristic of livewire page' (#903) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 46s
Reviewed-on: #903
2026-08-18 10:35:06 +00:00
dhanabalan
dbe1c0a1c2 Added created by and updated by column in production characteristic of livewire page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 26s
Laravel Pint / pint (pull_request) Successful in 3m18s
Laravel Larastan / larastan (pull_request) Failing after 4m47s
2026-08-18 16:04:41 +05:30
ad4a9898c6 Merge pull request 'Added panel box supplier columns in panel box livewire page' (#902) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Reviewed-on: #902
2026-08-18 10:28:32 +00:00
dhanabalan
009e5f93a3 Added panel box supplier columns in panel box livewire page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 26s
Laravel Larastan / larastan (pull_request) Failing after 4m40s
Laravel Pint / pint (pull_request) Successful in 4m16s
2026-08-18 15:58:12 +05:30
e8ae8d5f85 Merge pull request 'Added order by id logic in panel box validation' (#901) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
Reviewed-on: #901
2026-08-18 09:59:11 +00:00
dhanabalan
a8bd7a781c Added order by id logic in panel box validation
Some checks failed
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 26s
Laravel Pint / pint (pull_request) Successful in 1m53s
Laravel Larastan / larastan (pull_request) Failing after 6m42s
2026-08-18 15:28:58 +05:30
f35333c147 Merge pull request 'Added logic in panel box validation and filter' (#900) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Reviewed-on: #900
2026-08-18 09:01:35 +00:00
dhanabalan
5823a6b3d1 Added logic in panel box validation and filter
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 30s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 1m18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 1m2s
Laravel Pint / pint (pull_request) Failing after 2m55s
Laravel Larastan / larastan (pull_request) Failing after 7m34s
2026-08-18 14:31:15 +05:30
e1e155d42e Merge pull request 'ranjith-dev' (#899) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #899
2026-08-18 08:59:04 +00:00
dhanabalan
35ca404a69 Added panel box validation relationship in line model file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 30s
Laravel Pint / pint (pull_request) Successful in 2m27s
Laravel Larastan / larastan (pull_request) Failing after 6m1s
2026-08-18 14:27:44 +05:30
dhanabalan
9d12234d34 Added panelBoxValidation relationship in plant model file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
2026-08-18 14:21:03 +05:30
ed3bf55204 Merge pull request 'ranjith-dev' (#898) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Reviewed-on: #898
2026-08-18 07:16:46 +00:00
dhanabalan
f7964dca25 Added work center column in alert mail exporter
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 28s
Laravel Pint / pint (pull_request) Successful in 2m57s
Laravel Larastan / larastan (pull_request) Failing after 6m39s
2026-08-18 12:46:24 +05:30
dhanabalan
bfcb5f9f0c Added work center in alert mail resource page
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
2026-08-18 12:45:40 +05:30
dhanabalan
39d65afcfe Added machine_id column in alert mail model file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
2026-08-18 12:44:25 +05:30
dhanabalan
7fcb3ebcb2 Added machine id column migration file for alert mail rule table
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
2026-08-18 12:43:49 +05:30
a625312c59 Merge pull request 'Added options in module and rule name in alert mail page' (#897) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 41s
Reviewed-on: #897
2026-08-18 06:06:44 +00:00
dhanabalan
e7acc56943 Added options in module and rule name in alert mail page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 27s
Laravel Pint / pint (pull_request) Successful in 3m2s
Laravel Larastan / larastan (pull_request) Failing after 4m23s
2026-08-18 11:36:12 +05:30
f25ee965f3 Merge pull request 'solved ui issue in dashboard page' (#896) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Reviewed-on: #896
2026-08-18 05:42:29 +00:00
dhanabalan
d53addd0ad solved ui issue in dashboard page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m26s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 1m45s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 1m0s
Laravel Pint / pint (pull_request) Successful in 2m32s
Laravel Larastan / larastan (pull_request) Failing after 5m28s
2026-08-18 11:11:50 +05:30
0e86ce0a4e Merge pull request 'Added current date logic in sticker pdf service' (#895) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Reviewed-on: #895
2026-08-13 05:43:27 +00:00
dhanabalan
73627bd7f9 Added current date logic in sticker pdf service
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 46s
Laravel Larastan / larastan (pull_request) Failing after 5m10s
Laravel Pint / pint (pull_request) Successful in 6m15s
2026-08-13 11:13:07 +05:30
f81033636c Merge pull request 'Added curernt date option in sticker detail' (#894) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #894
2026-08-13 05:41:37 +00:00
dhanabalan
ea0c4fcf31 Added curernt date option in sticker detail
Some checks failed
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 27s
Laravel Pint / pint (pull_request) Successful in 3m35s
Laravel Larastan / larastan (pull_request) Failing after 7m15s
2026-08-13 11:11:21 +05:30
0d83ff3ab5 Merge pull request 'remove item code checkign validation part in ocr validation page' (#893) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
Reviewed-on: #893
2026-08-13 04:10:29 +00:00
dhanabalan
b662795677 remove item code checkign validation part in ocr validation page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 27s
Laravel Larastan / larastan (pull_request) Failing after 3m51s
Laravel Pint / pint (pull_request) Successful in 5m48s
2026-08-13 09:40:12 +05:30
5a55fd49d5 Merge pull request 'changed regex qr code format for panel box' (#892) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Reviewed-on: #892
2026-08-12 12:20:48 +00:00
dhanabalan
6b8b03b2e3 changed regex qr code format for panel box
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 26s
Laravel Pint / pint (pull_request) Successful in 5m7s
Laravel Larastan / larastan (pull_request) Failing after 5m40s
2026-08-12 17:50:31 +05:30
bf4fccecc7 Merge pull request 'corrected logic in sticker print page' (#891) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 54s
Reviewed-on: #891
2026-08-12 11:08:23 +00:00
dhanabalan
afc41f20a5 corrected logic in sticker print page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 46s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 36s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 30s
Laravel Pint / pint (pull_request) Successful in 3m7s
Laravel Larastan / larastan (pull_request) Failing after 4m37s
2026-08-12 16:38:02 +05:30
ebbe24b130 Merge pull request 'added machine in sticker mapping master in sticker print page' (#890) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
Reviewed-on: #890
2026-08-12 11:03:13 +00:00
dhanabalan
c3b8bc3880 added machine in sticker mapping master in sticker print page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 27s
Laravel Pint / pint (pull_request) Successful in 3m32s
Laravel Larastan / larastan (pull_request) Failing after 6m12s
2026-08-12 16:32:56 +05:30
871af92ebe Merge pull request 'Added searchable in characteristics type in sticker detail resource page' (#889) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Reviewed-on: #889
2026-08-12 08:50:35 +00:00
dhanabalan
42b27afb41 Added searchable in characteristics type in sticker detail resource page
Some checks failed
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 26s
Laravel Pint / pint (pull_request) Successful in 6m10s
Laravel Larastan / larastan (pull_request) Failing after 6m44s
2026-08-12 14:20:21 +05:30
44f8495f16 Merge pull request 'removed qr value in sticker detail importer' (#888) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Reviewed-on: #888
2026-08-12 05:14:07 +00:00
dhanabalan
889b18e833 removed qr value in sticker detail importer
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 26s
Laravel Pint / pint (pull_request) Successful in 5m22s
Laravel Larastan / larastan (pull_request) Failing after 6m1s
2026-08-12 10:43:44 +05:30
b56824cfdf Merge pull request 'Added logic in for plant name in sticker pdf service' (#887) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 30s
Reviewed-on: #887
2026-08-12 04:51:05 +00:00
dhanabalan
68bc729856 Added logic in for plant name in sticker pdf service
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 26s
Laravel Larastan / larastan (pull_request) Failing after 4m15s
Laravel Pint / pint (pull_request) Successful in 4m57s
2026-08-12 10:20:46 +05:30
7f88249033 Merge pull request 'Changed sticker detail importer logic' (#886) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Reviewed-on: #886
2026-08-12 04:38:08 +00:00
dhanabalan
7d10def133 Changed sticker detail importer logic
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 30s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 28s
Laravel Larastan / larastan (pull_request) Failing after 5m24s
Laravel Pint / pint (pull_request) Successful in 5m9s
2026-08-12 10:07:40 +05:30
52356d1d52 Merge pull request 'Added options in characteristics type and searchable' (#885) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #885
2026-08-12 04:32:15 +00:00
dhanabalan
330bdd4d6e Added options in characteristics type and searchable
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 53s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 39s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 30s
Laravel Pint / pint (pull_request) Successful in 6m17s
Laravel Larastan / larastan (pull_request) Failing after 7m2s
2026-08-12 10:01:58 +05:30
57a0a0f658 Merge pull request 'ranjith-dev' (#884) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #884
2026-08-12 04:28:36 +00:00
dhanabalan
b7c552a64e Added mrp in item characteristic resource page
Some checks failed
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 27s
Laravel Pint / pint (pull_request) Successful in 3m38s
Laravel Larastan / larastan (pull_request) Failing after 5m43s
2026-08-12 09:58:02 +05:30
dhanabalan
8abd3057e1 Added mrp in item characteristic model file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
2026-08-12 09:56:46 +05:30
dhanabalan
1ebe456466 Added mrp column in item characteristics table
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
2026-08-12 09:54:58 +05:30
ecb0c115da Merge pull request 'Added view sticker print page permission' (#883) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 53s
Reviewed-on: #883
2026-08-12 04:15:34 +00:00
dhanabalan
f3caccea72 Added view sticker print page permission
Some checks failed
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 32s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 27s
Laravel Pint / pint (pull_request) Successful in 4m7s
Laravel Larastan / larastan (pull_request) Failing after 6m11s
2026-08-12 09:45:16 +05:30
640bd1b520 Merge pull request 'Added sticker preview route in web.php' (#882) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #882
2026-08-12 04:11:06 +00:00
dhanabalan
fb12f03b34 Added sticker preview route in web.php
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 48s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 28s
Laravel Pint / pint (pull_request) Successful in 3m46s
Laravel Larastan / larastan (pull_request) Failing after 4m11s
2026-08-12 09:40:46 +05:30
4e8b5188ed Merge pull request 'Added sticker print page' (#881) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #881
2026-08-12 04:08:50 +00:00
dhanabalan
91ede80655 Added sticker print page
Some checks failed
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 26s
Laravel Pint / pint (pull_request) Successful in 3m19s
Laravel Larastan / larastan (pull_request) Failing after 4m42s
2026-08-12 09:38:35 +05:30
e4f0b38858 Merge pull request 'Added sticker validation resource blade file' (#880) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Reviewed-on: #880
2026-08-12 03:58:23 +00:00
dhanabalan
26dd1bddc1 Added sticker validation resource blade file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 30s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 27s
Laravel Pint / pint (pull_request) Successful in 4m12s
Laravel Larastan / larastan (pull_request) Failing after 4m38s
2026-08-12 09:28:04 +05:30
415fbab703 Merge pull request 'ranjith-dev' (#879) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
Reviewed-on: #879
2026-08-12 03:46:16 +00:00
dhanabalan
8cc77d0e01 Added sticker validation policy file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 2m29s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 2m35s
Laravel Pint / pint (pull_request) Successful in 3m55s
Laravel Larastan / larastan (pull_request) Failing after 8m22s
2026-08-12 09:13:58 +05:30
dhanabalan
a127a6e35f Added sticker validation resource pages
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
2026-08-12 09:12:38 +05:30
dhanabalan
9ad230d789 Added sticker validation model file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 35s
2026-08-12 09:10:30 +05:30
dhanabalan
f8683a561c Added sticker validation migration file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
2026-08-12 09:09:28 +05:30
3aa5cc62cb Merge pull request 'ranjith-dev' (#878) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Reviewed-on: #878
2026-08-04 10:20:02 +00:00
dhanabalan
e047abed7b added sticker mapping master policy files
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 22s
Laravel Pint / pint (pull_request) Successful in 3m38s
Laravel Larastan / larastan (pull_request) Failing after 6m2s
2026-08-04 15:49:29 +05:30
dhanabalan
226d91ec6e Added sticker mapping master importer and exporter
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
2026-08-04 15:48:18 +05:30
dhanabalan
221220d48e Added sticker mapping master resource pages
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
2026-08-04 15:46:57 +05:30
dhanabalan
5b37cfe308 Added sticker mapping master model file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
2026-08-04 15:45:40 +05:30
dhanabalan
44b7088b6f Added sticker master mapping migration file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
2026-08-04 15:45:06 +05:30
33b16c1c95 Merge pull request 'Added sticker pdf service file' (#877) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Reviewed-on: #877
2026-08-04 10:12:33 +00:00
dhanabalan
e03bf547f0 Added sticker pdf service file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Gemini PR Review / Gemini PR Review (pull_request) Failing after 23s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Laravel Pint / pint (pull_request) Successful in 3m40s
Laravel Larastan / larastan (pull_request) Failing after 6m16s
2026-08-04 15:42:17 +05:30
11cf91c1af Merge pull request 'Added sticker structure preview page' (#876) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #876
2026-08-04 10:10:53 +00:00
dhanabalan
c519fd2180 Added sticker structure preview page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Laravel Pint / pint (pull_request) Successful in 3m4s
Laravel Larastan / larastan (pull_request) Failing after 4m20s
2026-08-04 15:40:36 +05:30
867a4952ef Merge pull request 'ranjith-dev' (#875) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Reviewed-on: #875
2026-08-04 10:05:19 +00:00
dhanabalan
6b59c6ac47 Added sticker deatil policy file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Laravel Pint / pint (pull_request) Successful in 2m31s
Laravel Larastan / larastan (pull_request) Failing after 6m9s
2026-08-04 15:35:02 +05:30
dhanabalan
0dca72d271 Added sticker detail importer and exporter
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-08-04 15:33:54 +05:30
dhanabalan
e5c805f7ee Added sticker detail resource pages
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-08-04 15:33:01 +05:30
dhanabalan
44e890ccb6 Added sticker detail model file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
2026-08-04 15:30:47 +05:30
dhanabalan
a3b96cbded Added sticker details migration file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-08-04 15:30:11 +05:30
bb6f26fbb8 Merge pull request 'ranjith-dev' (#874) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Reviewed-on: #874
2026-08-04 09:54:39 +00:00
dhanabalan
44204df962 Added item characteristic policy file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Laravel Pint / pint (pull_request) Successful in 3m28s
Laravel Larastan / larastan (pull_request) Failing after 4m58s
2026-08-04 15:24:20 +05:30
dhanabalan
a3525a2d6e Added item characteristic importer and exporter
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-08-04 15:23:31 +05:30
dhanabalan
eb1a23bd7c Added item characteristic resource pages
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-08-04 15:22:05 +05:30
dhanabalan
e8b2c17427 Added item characteristic model file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-08-04 15:20:22 +05:30
dhanabalan
f62618d82c Added item characteristics migration file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-08-04 15:19:21 +05:30
30545569b7 Merge pull request 'commented generate template button in sticker structure detail page' (#873) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Reviewed-on: #873
2026-08-04 09:27:49 +00:00
dhanabalan
7db5c91842 commented generate template button in sticker structure detail page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Laravel Pint / pint (pull_request) Successful in 2m35s
Laravel Larastan / larastan (pull_request) Failing after 3m41s
2026-08-04 14:57:34 +05:30
d03dffad65 Merge pull request 'ranjith-dev' (#872) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #872
2026-08-04 09:24:52 +00:00
dhanabalan
c571e6a961 Added sticker structure detail policy file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 1m1s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 1m5s
Laravel Larastan / larastan (pull_request) Failing after 4m8s
Laravel Pint / pint (pull_request) Successful in 5m13s
2026-08-04 14:54:25 +05:30
dhanabalan
480d906e6b Added sticker structure detail importer and exporter
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-08-04 14:53:41 +05:30
dhanabalan
25a73256bf Added sticker structure details resource pages
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
2026-08-04 14:52:38 +05:30
dhanabalan
a9a3bcf1dc Added sticker structure detail model file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m31s
2026-08-04 14:50:52 +05:30
dhanabalan
e23c493e59 Added sticker structure details migration file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
2026-08-04 14:49:55 +05:30
860ee7ecf5 Merge pull request 'Removed bundle quantity from the api' (#871) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
Reviewed-on: #871
2026-07-29 10:53:57 +00:00
dhanabalan
a6e7330275 Removed bundle quantity from the api
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 19s
Laravel Pint / pint (pull_request) Successful in 2m41s
Laravel Larastan / larastan (pull_request) Failing after 3m57s
2026-07-29 16:23:27 +05:30
936cdf5c21 Merge pull request 'Added bundle quantity to the quality part validation api' (#870) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Reviewed-on: #870
2026-07-29 10:41:20 +00:00
dhanabalan
ec517d01f2 Added bundle quantity to the quality part validation api
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 19s
Laravel Pint / pint (pull_request) Successful in 3m7s
Laravel Larastan / larastan (pull_request) Failing after 4m35s
2026-07-29 16:10:34 +05:30
da0ff48347 Merge pull request 'Added quality part validation api with validation' (#869) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m6s
Reviewed-on: #869
2026-07-29 10:26:41 +00:00
dhanabalan
6b02cb8c29 Added quality part validation api with validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 22s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 25s
Laravel Pint / pint (pull_request) Successful in 2m34s
Laravel Larastan / larastan (pull_request) Failing after 6m6s
2026-07-29 15:55:29 +05:30
f106cd1e1e Merge pull request 'added zoho support link in dashboard page' (#868) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #868
2026-07-28 11:55:25 +00:00
dhanabalan
33b02fbed7 added zoho support link in dashboard page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Laravel Pint / pint (pull_request) Successful in 1m49s
Laravel Larastan / larastan (pull_request) Failing after 3m3s
2026-07-28 17:24:58 +05:30
edd9048f0b Merge pull request 'Change between to entry time for vehicle entry' (#867) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 21s
Reviewed-on: #867
2026-07-28 10:52:32 +00:00
dhanabalan
fe7e5301c0 Change between to entry time for vehicle entry
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 1m57s
Laravel Larastan / larastan (pull_request) Failing after 3m19s
2026-07-28 16:22:11 +05:30
ce084122a2 Merge pull request 'corrected name of the dealer in visitor entry page' (#866) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #866
2026-07-28 03:25:16 +00:00
dhanabalan
fee05e2388 corrected name of the dealer in visitor entry page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 22s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 21s
Laravel Pint / pint (pull_request) Successful in 3m4s
Laravel Larastan / larastan (pull_request) Failing after 4m5s
2026-07-28 08:54:48 +05:30
b21f68fc36 Merge pull request 'ranjith-dev' (#865) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #865
2026-07-26 05:22:22 +00:00
dhanabalan
c45efba965 Added dealer logic in create page of visitor entry
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Laravel Pint / pint (pull_request) Successful in 2m15s
Laravel Larastan / larastan (pull_request) Failing after 3m48s
2026-07-26 10:52:03 +05:30
dhanabalan
ef24ef8549 Added dealer select option in visitor resource page
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
2026-07-26 10:49:29 +05:30
351bfb359b Merge pull request 'Added organizer in visitor entry migration file and model file' (#864) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Reviewed-on: #864
2026-07-26 05:14:00 +00:00
dhanabalan
6f5bc9ad38 Added organizer in visitor entry migration file and model file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 19s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Laravel Pint / pint (pull_request) Successful in 2m15s
Laravel Larastan / larastan (pull_request) Failing after 4m3s
2026-07-26 10:43:37 +05:30
418a17ffb3 Merge pull request 'ranjith-dev' (#863) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Reviewed-on: #863
2026-07-26 05:07:03 +00:00
dhanabalan
28503c0953 Added dealer visit plan policy file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 1m10s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 1m14s
Laravel Pint / pint (pull_request) Successful in 3m12s
Laravel Larastan / larastan (pull_request) Failing after 4m43s
2026-07-26 10:36:41 +05:30
dhanabalan
956f563203 Added dealer vist plan importer and exporter
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-07-26 10:35:25 +05:30
dhanabalan
f7d37a7c3f Added dealer visit plan resource pages
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-07-26 10:34:07 +05:30
dhanabalan
fe1be84743 Added dealer visit plan model file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 30s
2026-07-26 10:31:36 +05:30
dhanabalan
8b01f91bf7 Added dealer visit plan migration file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
2026-07-26 10:30:50 +05:30
62e577a87f Merge pull request 'Changed batch length validation in weight validation' (#861) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 21s
Reviewed-on: #861
2026-07-24 11:57:14 +00:00
dhanabalan
dbd7c2860f Changed batch length validation in weight validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 2m58s
Laravel Larastan / larastan (pull_request) Failing after 3m49s
2026-07-24 17:26:59 +05:30
651f25b8de Merge pull request 'Changed name of the label for weight validation in exporter' (#860) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Reviewed-on: #860
2026-07-24 11:24:18 +00:00
dhanabalan
8bf3bfc3f8 Changed name of the label for weight validation in exporter
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Larastan / larastan (pull_request) Failing after 3m43s
Laravel Pint / pint (pull_request) Successful in 3m37s
2026-07-24 16:54:04 +05:30
7106d2aa13 Merge pull request 'changed the label name in bundle numberin weight validation' (#859) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #859
2026-07-24 11:22:31 +00:00
dhanabalan
0561a2443e changed the label name in bundle numberin weight validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 22s
Laravel Larastan / larastan (pull_request) Failing after 3m32s
Laravel Pint / pint (pull_request) Successful in 4m7s
2026-07-24 16:52:17 +05:30
ad35a64869 Merge pull request 'changed name of the obd number' (#858) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 14s
Reviewed-on: #858
2026-07-24 11:18:03 +00:00
dhanabalan
6d4ed2a384 changed name of the obd number
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m36s
Laravel Larastan / larastan (pull_request) Failing after 6m1s
2026-07-24 16:47:22 +05:30
4b06a32893 Merge pull request 'ranjith-dev' (#857) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #857
2026-07-24 06:28:18 +00:00
dhanabalan
692a114f4b Added three column in panel box model file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m41s
Laravel Larastan / larastan (pull_request) Failing after 5m3s
2026-07-24 11:57:45 +05:30
dhanabalan
b6ea3b87ca Added three columns in panel box validations table
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-07-24 11:56:46 +05:30
02c3a9aff0 Merge pull request 'Added panel gr master logic and quantity logic in panel box validation' (#856) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #856
2026-07-24 05:15:40 +00:00
dhanabalan
8009117456 Added panel gr master logic and quantity logic in panel box validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m30s
Laravel Larastan / larastan (pull_request) Failing after 4m12s
2026-07-24 10:45:18 +05:30
8bba768cb3 Merge pull request 'Added import and export permissions in seeder for panel box seeder' (#855) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #855
2026-07-24 04:54:15 +00:00
dhanabalan
d1eaa86fe1 Added import and export permissions in seeder for panel box seeder
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 25s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 22s
Laravel Pint / pint (pull_request) Successful in 2m28s
Laravel Larastan / larastan (pull_request) Failing after 3m36s
2026-07-24 10:23:55 +05:30
5ddf314503 Merge pull request 'added ref of panel gr master in item model' (#854) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #854
2026-07-24 04:49:03 +00:00
dhanabalan
fb8016d374 added ref of panel gr master in item model
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 20s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 2m59s
Laravel Larastan / larastan (pull_request) Failing after 4m39s
2026-07-24 10:18:37 +05:30
c8638db7a6 Merge pull request 'ranjith-dev' (#853) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #853
2026-07-24 04:44:22 +00:00
dhanabalan
3f697d67f5 Added panel gr master importer and exporter
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 29s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 23s
Laravel Pint / pint (pull_request) Successful in 3m5s
Laravel Larastan / larastan (pull_request) Failing after 4m10s
2026-07-24 10:14:06 +05:30
dhanabalan
cd1c8ff957 Added panel gr master policy file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Laravel Pint / pint (pull_request) Successful in 2m31s
Laravel Larastan / larastan (pull_request) Failing after 4m6s
2026-07-24 10:12:20 +05:30
dhanabalan
4916d622bd Added panel gr master resource pages
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
2026-07-24 10:11:30 +05:30
dhanabalan
118ca4d7a9 Added panel gr master model file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-07-24 10:07:11 +05:30
dhanabalan
c1f9534465 added panel gr master migration file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
2026-07-24 10:05:03 +05:30
631c2f4095 Merge pull request 'solved bug in notification attempt null in wire master packing' (#852) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #852
2026-07-23 06:57:26 +00:00
dhanabalan
edbbe138a3 solved bug in notification attempt null in wire master packing
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Laravel Pint / pint (pull_request) Successful in 2m14s
Laravel Larastan / larastan (pull_request) Failing after 3m48s
2026-07-23 12:27:04 +05:30
38a6395530 Merge pull request 'Added auto focus logic in guard patrol entry' (#851) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #851
2026-07-22 09:33:18 +00:00
dhanabalan
6f9b19289a Added auto focus logic in guard patrol entry
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 2m38s
Laravel Larastan / larastan (pull_request) Failing after 4m32s
2026-07-22 15:03:03 +05:30
10092bef65 Merge pull request 'issues solved in customer po filter in wire master packing' (#850) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #850
2026-07-22 07:03:18 +00:00
dhanabalan
d467543e67 issues solved in customer po filter in wire master packing
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 3m19s
Laravel Larastan / larastan (pull_request) Failing after 3m59s
2026-07-22 12:32:57 +05:30
414e51b4bf Merge pull request 'altered logic for total quantity in wire master' (#849) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Reviewed-on: #849
2026-07-22 06:30:06 +00:00
dhanabalan
aa4a9f68fa altered logic for total quantity in wire master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Larastan / larastan (pull_request) Failing after 3m47s
Laravel Pint / pint (pull_request) Successful in 4m34s
2026-07-22 11:59:52 +05:30
3c8fd7b3d6 Merge pull request 'commented unwanted msg in panel' (#848) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #848
2026-07-21 07:07:36 +00:00
dhanabalan
d6a683b9c1 commented unwanted msg in panel
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m51s
Laravel Larastan / larastan (pull_request) Failing after 4m32s
2026-07-21 12:37:23 +05:30
a41756f819 Merge pull request 'allowed for typing in production order in panel box' (#847) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Reviewed-on: #847
2026-07-21 06:54:10 +00:00
dhanabalan
1d3411e033 allowed for typing in production order in panel box
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 3m51s
Laravel Larastan / larastan (pull_request) Failing after 5m42s
2026-07-21 12:23:56 +05:30
73616984b3 Merge pull request 'Added label name for panel box' (#846) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #846
2026-07-21 06:51:22 +00:00
dhanabalan
59eae005eb Added label name for panel box
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Laravel Pint / pint (pull_request) Successful in 2m34s
Laravel Larastan / larastan (pull_request) Failing after 5m13s
2026-07-21 12:20:52 +05:30
906b6c2a83 Merge pull request 'modified logic in loading inter unit staff codes' (#845) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #845
2026-07-20 03:21:18 +00:00
dhanabalan
f6179a0143 modified logic in loading inter unit staff codes
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m19s
Laravel Larastan / larastan (pull_request) Failing after 3m36s
2026-07-20 08:50:53 +05:30
32b213a464 Merge pull request 'added employee visit logic in out mail' (#844) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #844
2026-07-19 06:04:48 +00:00
dhanabalan
aea402cd4c added employee visit logic in out mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 2m44s
Laravel Larastan / larastan (pull_request) Failing after 4m51s
2026-07-19 11:34:30 +05:30
7fbeead3dd Merge pull request 'ranjith-dev' (#843) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 22s
Reviewed-on: #843
2026-07-19 04:59:22 +00:00
dhanabalan
a6b29e07bb removed unwanted codes in visitor page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Laravel Pint / pint (pull_request) Successful in 3m36s
Laravel Larastan / larastan (pull_request) Failing after 4m24s
2026-07-19 10:28:58 +05:30
dhanabalan
8f32671db6 Added employee visitor logic in mail page
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
2026-07-19 10:28:07 +05:30
b39c298fb4 Merge pull request 'Added inter unit staff logic in visitor entry page' (#842) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #842
2026-07-19 04:35:23 +00:00
dhanabalan
fe5630e7b0 Added inter unit staff logic in visitor entry page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 2m4s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 1m3s
Laravel Pint / pint (pull_request) Successful in 3m0s
Laravel Larastan / larastan (pull_request) Failing after 4m25s
2026-07-19 10:05:01 +05:30
cb12cec5af Merge pull request 'Added export serial numbers for production order' (#841) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #841
2026-07-18 12:13:42 +00:00
dhanabalan
107d356745 Added export serial numbers for production order
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Laravel Pint / pint (pull_request) Successful in 2m57s
Laravel Larastan / larastan (pull_request) Failing after 4m3s
2026-07-18 17:43:15 +05:30
dca11f0349 Merge pull request 'Added export serial method in production order controller' (#840) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #840
2026-07-18 10:09:52 +00:00
dhanabalan
dd56cd7aae Added export serial method in production order controller
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Larastan / larastan (pull_request) Failing after 3m39s
Laravel Pint / pint (pull_request) Failing after 13m10s
2026-07-18 15:39:37 +05:30
835a928ff3 Merge pull request 'added route for production serial excel report' (#839) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #839
2026-07-18 10:08:27 +00:00
dhanabalan
d275fb9407 added route for production serial excel report
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Gemini PR Review / Gemini PR Review (pull_request) Failing after 25s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 23s
Laravel Pint / pint (pull_request) Successful in 2m45s
Laravel Larastan / larastan (pull_request) Failing after 3m59s
2026-07-18 15:38:13 +05:30
7aee42cc5d Merge pull request 'Added serial export excel page' (#838) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #838
2026-07-18 10:07:16 +00:00
dhanabalan
1f1b690515 Added serial export excel page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Gemini PR Review / Gemini PR Review (pull_request) Failing after 32s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 24s
Laravel Pint / pint (pull_request) Successful in 2m27s
Laravel Larastan / larastan (pull_request) Failing after 4m30s
2026-07-18 15:36:57 +05:30
0de8916f02 Merge pull request 'Added export serial excel button in production order page' (#837) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #837
2026-07-18 10:06:18 +00:00
dhanabalan
56ae97d2a3 Added export serial excel button in production order page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Laravel Pint / pint (pull_request) Successful in 2m48s
Laravel Larastan / larastan (pull_request) Failing after 4m17s
2026-07-18 15:35:46 +05:30
105295350b Merge pull request 'corrected alignment for item pdf' (#836) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #836
2026-07-17 06:20:52 +00:00
dhanabalan
41d31fcf3d corrected alignment for item pdf
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m24s
Laravel Larastan / larastan (pull_request) Failing after 4m18s
2026-07-17 11:50:38 +05:30
ac1ca537ef Merge pull request 'changed logic in order pdf' (#835) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #835
2026-07-17 06:16:02 +00:00
dhanabalan
5e86a51fa5 changed logic in order pdf
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Larastan / larastan (pull_request) Failing after 4m45s
Laravel Pint / pint (pull_request) Successful in 3m52s
2026-07-17 11:45:47 +05:30
207527491e Merge pull request 'reversed logic in production order pdf' (#834) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #834
2026-07-17 06:11:37 +00:00
dhanabalan
188cfdac4d reversed logic in production order pdf
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 4m22s
Laravel Larastan / larastan (pull_request) Failing after 7m3s
2026-07-17 11:41:21 +05:30
7aa244886b Merge pull request 'Adjusted align issue in print blade file' (#833) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #833
2026-07-17 05:44:21 +00:00
dhanabalan
8f3dfbc290 Adjusted align issue in print blade file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 4m23s
Laravel Larastan / larastan (pull_request) Failing after 6m32s
2026-07-17 11:14:07 +05:30
5189ece56b Merge pull request 'changed size of the wire pallet' (#832) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 19s
Reviewed-on: #832
2026-07-17 04:10:30 +00:00
dhanabalan
a294ca3ef0 changed size of the wire pallet
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 21s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 24s
Laravel Pint / pint (pull_request) Successful in 4m28s
Laravel Larastan / larastan (pull_request) Failing after 5m10s
2026-07-17 09:40:06 +05:30
bbecb86dc3 Merge pull request 'added logic in cycle count' (#831) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #831
2026-07-16 10:09:46 +00:00
dhanabalan
fdc0aed31c added logic in cycle count
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 3m36s
Laravel Larastan / larastan (pull_request) Failing after 3m59s
2026-07-16 15:39:29 +05:30
a3cec9db06 Merge pull request 'Changed logic in cycle count' (#830) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 22s
Reviewed-on: #830
2026-07-16 09:56:51 +00:00
dhanabalan
947aacb074 Changed logic in cycle count
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 2m22s
Laravel Larastan / larastan (pull_request) Failing after 3m44s
2026-07-16 15:26:36 +05:30
0c6331282e Merge pull request 'uncommented doc no update logic' (#829) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Reviewed-on: #829
2026-07-16 06:54:01 +00:00
dhanabalan
b7b5db068b uncommented doc no update logic
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 2m25s
Laravel Larastan / larastan (pull_request) Failing after 4m55s
2026-07-16 12:23:44 +05:30
7d8b2d8632 Merge pull request 'ranjith-dev' (#828) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Reviewed-on: #828
2026-07-16 04:19:45 +00:00
dhanabalan
d42ae70e46 added item code api route php
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 14s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Laravel Larastan / larastan (pull_request) Failing after 4m9s
Laravel Pint / pint (pull_request) Successful in 4m20s
2026-07-16 09:48:50 +05:30
dhanabalan
be2e7b00d7 added get item code method in plant controller
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 20s
2026-07-16 09:47:06 +05:30
7276765aa4 Merge pull request 'removed inspection status column in production characteristic' (#827) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #827
2026-07-13 08:33:47 +00:00
dhanabalan
1ce7995105 removed inspection status column in production characteristic
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m15s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 58s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 2m4s
Laravel Pint / pint (pull_request) Successful in 2m59s
Laravel Larastan / larastan (pull_request) Failing after 4m20s
2026-07-13 14:03:27 +05:30
164a1becac Merge pull request 'Removed afterStateUpdated method in actions control' (#826) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 21s
Reviewed-on: #826
2026-07-09 07:11:12 +00:00
dhanabalan
d5cd1437fe Removed afterStateUpdated method in actions control
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Laravel Pint / pint (pull_request) Successful in 2m22s
Laravel Larastan / larastan (pull_request) Failing after 4m6s
2026-07-09 12:40:13 +05:30
6ad91c8c96 Merge pull request 'Added searchable method for plant and work center and updated_by name on every change and deleted_at column added at the end and Enhance EquipmentMasterResource form' (#825) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #825
2026-07-08 13:15:29 +00:00
dhanabalan
d4d101c5c9 Added searchable method for plant and work center and updated_by name on every change and deleted_at column added at the end and Enhance EquipmentMasterResource form
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Laravel Pint / pint (pull_request) Successful in 3m1s
Laravel Larastan / larastan (pull_request) Failing after 5m2s
2026-07-08 18:44:17 +05:30
a6496b59c1 Merge pull request 'Added number of person in visitor mail' (#824) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #824
2026-07-08 10:48:37 +00:00
dhanabalan
b8cb0aa237 Added number of person in visitor mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 20s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m45s
Laravel Larastan / larastan (pull_request) Failing after 3m17s
2026-07-08 16:18:22 +05:30
027bacbce8 Merge pull request 'changed logic in pallet print controller' (#823) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #823
2026-07-08 05:59:33 +00:00
dhanabalan
eef42d9736 changed logic in pallet print controller
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 1m48s
Laravel Larastan / larastan (pull_request) Failing after 3m5s
2026-07-08 11:29:21 +05:30
6a87067387 Merge pull request 'issue solved undefined column error in wire' (#822) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #822
2026-07-08 05:50:39 +00:00
dhanabalan
3316c11036 issue solved undefined column error in wire
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 25s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 19s
Laravel Pint / pint (pull_request) Successful in 1m56s
Laravel Larastan / larastan (pull_request) Failing after 3m9s
2026-07-08 11:20:24 +05:30
4ac1e9f7c7 Merge pull request 'changed logic in wire pallet print' (#821) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #821
2026-07-08 05:49:11 +00:00
dhanabalan
bf22ef5af0 changed logic in wire pallet print
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m47s
Laravel Larastan / larastan (pull_request) Failing after 3m28s
2026-07-08 11:18:50 +05:30
2f84b269a1 Merge pull request 'Added created by and updated by in customer po master page' (#820) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 22s
Reviewed-on: #820
2026-07-08 05:17:42 +00:00
dhanabalan
52868742c0 Added created by and updated by in customer po master page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m47s
Laravel Larastan / larastan (pull_request) Failing after 3m18s
2026-07-08 10:47:27 +05:30
8de311cdfb Merge pull request 'Added id column for customer po page' (#819) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 22s
Reviewed-on: #819
2026-07-08 04:55:27 +00:00
dhanabalan
30175a71d3 Added id column for customer po page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m59s
Laravel Larastan / larastan (pull_request) Failing after 3m20s
2026-07-08 10:25:12 +05:30
f4f10e8748 Merge pull request 'Added plant code validation logic in resource page' (#818) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 22s
Reviewed-on: #818
2026-07-08 04:28:15 +00:00
dhanabalan
5fe8eeaeee Added plant code validation logic in resource page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 22s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 24s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 22s
Laravel Pint / pint (pull_request) Successful in 1m48s
Laravel Larastan / larastan (pull_request) Failing after 3m25s
2026-07-08 09:58:02 +05:30
d1e4114504 Merge pull request 'removed unwanted lines in create panel box validation' (#817) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #817
2026-07-08 04:26:55 +00:00
dhanabalan
fa10ea14fe removed unwanted lines in create panel box validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Gemini PR Review / Gemini PR Review (pull_request) Failing after 25s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 19s
Laravel Pint / pint (pull_request) Successful in 1m45s
Laravel Larastan / larastan (pull_request) Failing after 3m16s
2026-07-08 09:56:36 +05:30
375bffe6ce Merge pull request 'Added updated logic in panel box validation' (#816) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #816
2026-07-08 04:25:38 +00:00
dhanabalan
f0af6853ee Added updated logic in panel box validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 34s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 21s
Laravel Pint / pint (pull_request) Successful in 1m50s
Laravel Larastan / larastan (pull_request) Failing after 3m12s
2026-07-08 09:55:07 +05:30
3de0ca365c Merge pull request 'added one more validation in customer po master' (#815) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #815
2026-07-08 04:23:26 +00:00
dhanabalan
d213049fdd added one more validation in customer po master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 2m21s
Laravel Larastan / larastan (pull_request) Failing after 4m13s
2026-07-08 09:53:08 +05:30
16cbe67c8b Merge pull request 'loaded pending pallet list against plant and customer po' (#814) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 43s
Reviewed-on: #814
2026-07-07 07:09:43 +00:00
dhanabalan
42e926f9c2 loaded pending pallet list against plant and customer po
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 19s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m38s
Laravel Larastan / larastan (pull_request) Failing after 5m8s
2026-07-07 12:39:29 +05:30
85b214d5f3 Merge pull request 'changed month logic in pallet print' (#813) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #813
2026-07-07 03:52:46 +00:00
dhanabalan
140249e824 changed month logic in pallet print
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m52s
Laravel Larastan / larastan (pull_request) Failing after 3m27s
2026-07-07 09:22:33 +05:30
88fb7367ea Merge pull request 'Adjusted pdf column size in wire pallet pdf' (#812) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 22s
Reviewed-on: #812
2026-07-07 03:39:23 +00:00
dhanabalan
5a77cdfdc2 Adjusted pdf column size in wire pallet pdf
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m48s
Laravel Larastan / larastan (pull_request) Failing after 3m6s
2026-07-07 09:09:10 +05:30
15e0ed2014 Merge pull request 'Updated length validation on approver master' (#811) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 20s
Reviewed-on: #811
2026-07-06 13:34:58 +00:00
dhanabalan
015976dcb5 Updated length validation on approver master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Laravel Pint / pint (pull_request) Successful in 2m15s
Laravel Larastan / larastan (pull_request) Failing after 3m29s
2026-07-06 19:03:43 +05:30
e3caf06da5 Merge pull request 'changed item row size in wire pdf' (#810) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #810
2026-07-06 11:44:45 +00:00
dhanabalan
7627aa07fd changed item row size in wire pdf
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 29s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 25s
Laravel Pint / pint (pull_request) Failing after 1m45s
Laravel Larastan / larastan (pull_request) Failing after 3m23s
2026-07-06 17:14:33 +05:30
3e1b784215 Merge pull request 'changed logic in wire pdf' (#809) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #809
2026-07-06 11:42:38 +00:00
dhanabalan
aad961260a changed logic in wire pdf
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 2m0s
Laravel Larastan / larastan (pull_request) Failing after 3m54s
2026-07-06 17:12:26 +05:30
907ade608a Merge pull request 'changed column size in wire pdf' (#808) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #808
2026-07-06 11:39:46 +00:00
dhanabalan
305d28617b changed column size in wire pdf
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Larastan / larastan (pull_request) Failing after 1m51s
Laravel Pint / pint (pull_request) Failing after 1m45s
2026-07-06 17:09:33 +05:30
d82befeeaa Merge pull request 'adjusted size of the wire pallet pdf' (#807) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 36s
Reviewed-on: #807
2026-07-06 11:34:43 +00:00
dhanabalan
851e753b74 adjusted size of the wire pallet pdf
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 2m9s
Laravel Larastan / larastan (pull_request) Failing after 4m18s
2026-07-06 17:04:28 +05:30
b91a9acc34 Merge pull request 'added after state updated in wire master print page' (#806) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #806
2026-07-06 10:48:14 +00:00
dhanabalan
c94688a794 added after state updated in wire master print page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Laravel Pint / pint (pull_request) Successful in 2m14s
Laravel Larastan / larastan (pull_request) Failing after 3m31s
2026-07-06 16:17:56 +05:30
a5187ea7be Merge pull request 'ranjith-dev' (#805) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 47s
Reviewed-on: #805
2026-07-06 10:42:21 +00:00
dhanabalan
9db6227566 modified logic against customer po in create page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 2m49s
Laravel Larastan / larastan (pull_request) Failing after 4m34s
2026-07-06 16:12:00 +05:30
dhanabalan
d24b4f35f4 removed select item_id box in wire master packing resource page
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
2026-07-06 16:11:24 +05:30
cb3d43deb2 Merge pull request 'corrected logic pallet print controller' (#804) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 46s
Reviewed-on: #804
2026-07-06 06:59:04 +00:00
dhanabalan
56656264c0 corrected logic pallet print controller
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m25s
Laravel Larastan / larastan (pull_request) Failing after 4m19s
2026-07-06 12:28:51 +05:30
d31a392c21 Merge pull request 'changed logic of total box count in wire master print' (#803) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #803
2026-07-06 06:43:06 +00:00
dhanabalan
abf33605f5 changed logic of total box count in wire master print
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 3m57s
Laravel Larastan / larastan (pull_request) Failing after 5m44s
2026-07-06 12:12:55 +05:30
b5392c822e Merge pull request 'Added pallet in wire master print page' (#802) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 34s
Reviewed-on: #802
2026-07-06 06:37:10 +00:00
dhanabalan
60eb3c05a5 Added pallet in wire master print page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m48s
Laravel Larastan / larastan (pull_request) Failing after 3m15s
2026-07-06 12:06:56 +05:30
64af602434 Merge pull request 'changed logic in wire master print' (#801) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #801
2026-07-06 06:30:07 +00:00
dhanabalan
ccd06a4b6e changed logic in wire master print
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 1m48s
Laravel Larastan / larastan (pull_request) Failing after 3m27s
2026-07-06 11:59:49 +05:30
6bfe9b383e Merge pull request 'corrected logic in wire print page' (#800) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 44s
Reviewed-on: #800
2026-07-06 06:21:33 +00:00
dhanabalan
0d6ced5f63 corrected logic in wire print page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m14s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 59s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 1m33s
Laravel Pint / pint (pull_request) Successful in 2m11s
Laravel Larastan / larastan (pull_request) Failing after 4m20s
2026-07-06 11:50:46 +05:30
4e9ad8a666 Merge pull request 'Added group name of panel box validation page' (#799) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #799
2026-07-04 03:40:41 +00:00
dhanabalan
faa355ad79 Added group name of panel box validation page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m13s
Laravel Larastan / larastan (pull_request) Failing after 3m51s
2026-07-04 09:10:24 +05:30
336865d102 Merge pull request 'Added logic for characteristics not found halting record' (#798) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #798
2026-07-04 03:34:35 +00:00
dhanabalan
cc75016575 Added logic for characteristics not found halting record
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Laravel Pint / pint (pull_request) Successful in 2m8s
Laravel Larastan / larastan (pull_request) Failing after 3m39s
2026-07-04 09:04:06 +05:30
1f83dbefb0 Merge pull request 'Added item id select box in wire master packing' (#797) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #797
2026-07-03 06:20:12 +00:00
dhanabalan
6180cdda52 Added item id select box in wire master packing
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 1m50s
Laravel Larastan / larastan (pull_request) Failing after 3m14s
2026-07-03 11:49:47 +05:30
496a0fe80e Merge pull request 'Added logic in panel check list' (#796) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #796
2026-07-03 02:57:34 +00:00
dhanabalan
776d1664ce Added logic in panel check list
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 2m0s
Laravel Larastan / larastan (pull_request) Failing after 3m31s
2026-07-03 08:27:16 +05:30
df5dc3067a Merge pull request 'solved issue in lower value in panel box' (#795) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 31s
Reviewed-on: #795
2026-07-02 11:53:21 +00:00
dhanabalan
65b4ce50d3 solved issue in lower value in panel box
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 19s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 2m1s
Laravel Larastan / larastan (pull_request) Failing after 4m19s
2026-07-02 17:23:07 +05:30
316d670eb3 Merge pull request 'Added msg in import transit mail' (#794) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #794
2026-07-01 04:22:24 +00:00
dhanabalan
c338751a48 Added msg in import transit mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Laravel Pint / pint (pull_request) Successful in 1m55s
Laravel Larastan / larastan (pull_request) Failing after 3m21s
2026-07-01 09:51:52 +05:30
069d3bfa7b Merge pull request 'Crted issue in characteristic approver master for filtering plant' (#793) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #793
2026-06-30 12:45:23 +00:00
dhanabalan
075591459f Crted issue in characteristic approver master for filtering plant
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Laravel Pint / pint (pull_request) Failing after 31s
Laravel Larastan / larastan (pull_request) Failing after 3m6s
2026-06-30 18:14:12 +05:30
9ea8163f55 Merge pull request 'Added import and export wire master packing' (#792) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #792
2026-06-30 09:02:47 +00:00
dhanabalan
fc0a132c73 Added import and export wire master packing
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Laravel Pint / pint (pull_request) Successful in 1m53s
Laravel Larastan / larastan (pull_request) Failing after 3m16s
2026-06-30 14:32:16 +05:30
f068b1b79a Merge pull request 'Updated clear selection on plant or line name change' (#791) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Reviewed-on: #791
2026-06-28 04:04:12 +00:00
dhanabalan
a7e07affa0 Updated clear selection on plant or line name change
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m11s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 58s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 1m31s
Laravel Larastan / larastan (pull_request) Failing after 2m0s
Laravel Pint / pint (pull_request) Failing after 1m59s
2026-06-28 09:33:26 +05:30
6bf54a89ae Merge pull request 'Added rule and module of export dispatch' (#790) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 22s
Reviewed-on: #790
2026-06-26 05:24:44 +00:00
dhanabalan
65f64b2915 Added rule and module of export dispatch
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m21s
Laravel Larastan / larastan (pull_request) Failing after 4m2s
2026-06-26 10:54:26 +05:30
b94ce1e3f2 Merge pull request 'Added machines model in line' (#789) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #789
2026-06-26 05:16:55 +00:00
dhanabalan
9ab0709c6d Added machines model in line
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 19s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 22s
Laravel Pint / pint (pull_request) Successful in 1m58s
Laravel Larastan / larastan (pull_request) Failing after 3m42s
2026-06-26 10:46:30 +05:30
5e5234e080 Merge pull request 'ranjith-dev' (#788) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #788
2026-06-24 09:10:36 +00:00
dhanabalan
33425d6549 Added mail logic in gate out entry
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Laravel Pint / pint (pull_request) Successful in 1m54s
Laravel Larastan / larastan (pull_request) Failing after 3m15s
2026-06-24 14:40:10 +05:30
dhanabalan
3d11ecc882 Added visitor out mail page
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-06-24 14:39:27 +05:30
cba529b1d1 Merge pull request 'ranjith-dev' (#787) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 44s
Reviewed-on: #787
2026-06-23 12:10:47 +00:00
dhanabalan
518f61b24d Updated serial_number column order in correct manner
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Laravel Pint / pint (pull_request) Successful in 1m59s
Laravel Larastan / larastan (pull_request) Failing after 4m15s
2026-06-23 17:40:00 +05:30
dhanabalan
7bdf72cc9f Updated column order in correct manner
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-06-23 17:38:46 +05:30
dhanabalan
b7d2ca4111 Added material invoice exporter and updated serial invoice exporter
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-06-23 17:37:23 +05:30
0df5f9356c Merge pull request 'Added zmm_axial_force column in migration, model, resource, import, export, api on laser marking project' (#786) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 22s
Reviewed-on: #786
2026-06-22 14:05:04 +00:00
dhanabalan
a62c4ce0c7 Added zmm_axial_force column in migration, model, resource, import, export, api on laser marking project
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Laravel Pint / pint (pull_request) Successful in 1m48s
Laravel Larastan / larastan (pull_request) Failing after 3m14s
2026-06-22 19:34:12 +05:30
e069d4030a Merge pull request 'Added logic in panel box validation' (#785) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Reviewed-on: #785
2026-06-22 03:00:37 +00:00
dhanabalan
29b9eae080 Added logic in panel box validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m10s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 45s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 1m44s
Laravel Pint / pint (pull_request) Successful in 2m8s
Laravel Larastan / larastan (pull_request) Failing after 3m46s
2026-06-22 08:30:14 +05:30
1709135963 Merge pull request 'ranjith-dev' (#784) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 21s
Reviewed-on: #784
2026-06-20 09:58:31 +00:00
dhanabalan
2e6129970c Added machine has many in model files
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m59s
Laravel Larastan / larastan (pull_request) Failing after 3m27s
2026-06-20 15:27:52 +05:30
dhanabalan
7e2098318e Added filter logic in machine page
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 14s
2026-06-20 15:26:09 +05:30
8d4c245090 Merge pull request 'Added filter logic in work group master page' (#783) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #783
2026-06-20 06:51:58 +00:00
dhanabalan
021cdfa9c2 Added filter logic in work group master page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m6s
Laravel Larastan / larastan (pull_request) Failing after 3m24s
2026-06-20 12:21:33 +05:30
0e3c9dcd2b Merge pull request 'declared property in panel box validation' (#782) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 27s
Reviewed-on: #782
2026-06-20 03:21:07 +00:00
dhanabalan
7e97eed775 declared property in panel box validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Laravel Pint / pint (pull_request) Successful in 1m55s
Laravel Larastan / larastan (pull_request) Failing after 3m33s
2026-06-20 08:50:38 +05:30
ea3cebe7f2 Merge pull request 'ranjith-dev' (#781) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m2s
Reviewed-on: #781
2026-06-19 12:06:08 +00:00
dhanabalan
68c43b69e9 Added SAP Invoice Importer Page with validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Laravel Pint / pint (pull_request) Successful in 1m54s
Laravel Larastan / larastan (pull_request) Failing after 4m6s
2026-06-19 17:34:47 +05:30
dhanabalan
d6395224ff Added category column on report view and export logic
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-06-19 17:21:40 +05:30
5bc51fa35b Merge pull request 'Chnaged logic in import transit mail' (#780) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Reviewed-on: #780
2026-06-19 11:00:31 +00:00
dhanabalan
b069f3dbe7 Chnaged logic in import transit mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Larastan / larastan (pull_request) Failing after 40s
Laravel Pint / pint (pull_request) Successful in 1m52s
2026-06-19 16:30:14 +05:30
4bebf31600 Merge pull request 'ranjith-dev' (#779) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Reviewed-on: #779
2026-06-19 10:54:57 +00:00
dhanabalan
c307d5bc6a Added options in remark and i make text input for status
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Laravel Pint / pint (pull_request) Successful in 1m48s
Laravel Larastan / larastan (pull_request) Failing after 4m27s
2026-06-19 16:22:08 +05:30
dhanabalan
99cb1eb7a0 Updated warning label
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
2026-06-19 15:23:49 +05:30
3bdd7e0e73 Merge pull request 'Added na radio option in quality validation' (#778) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 30s
Reviewed-on: #778
2026-06-19 09:25:26 +00:00
dhanabalan
90876dda8d Added na radio option in quality validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Laravel Pint / pint (pull_request) Successful in 1m52s
Laravel Larastan / larastan (pull_request) Failing after 3m46s
2026-06-19 14:55:01 +05:30
b1b66b9aa8 Merge pull request 'Swapped column of remark and status column in import transit mail' (#777) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 41s
Reviewed-on: #777
2026-06-19 08:57:39 +00:00
dhanabalan
dc732016eb Swapped column of remark and status column in import transit mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m18s
Laravel Larastan / larastan (pull_request) Failing after 3m57s
2026-06-19 14:27:19 +05:30
64c5b87dee Merge pull request 'ranjith-dev' (#776) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 21s
Reviewed-on: #776
2026-06-18 15:50:01 +00:00
dhanabalan
16e4ce43bb Updated invoice_quantity value to trace scanned and pending quantity for the item code in livewire and blade file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 14s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 19s
Laravel Pint / pint (pull_request) Successful in 2m48s
Laravel Larastan / larastan (pull_request) Failing after 3m58s
2026-06-18 21:18:53 +05:30
dhanabalan
f82c3fe390 Updated invoice_quantity value to trace scanned and pending quantity for the item code in create page
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-06-18 21:17:06 +05:30
dhanabalan
8efd64545d Added invoice_quantity column in model
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
2026-06-18 21:13:33 +05:30
dhanabalan
f0e218d279 Added invoice_quantity column in migration 2026-06-18 21:12:32 +05:30
9e13a120db Merge pull request 'changed logic in panel' (#775) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #775
2026-06-18 12:23:37 +00:00
dhanabalan
d756177bd9 changed logic in panel
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 36s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 25s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m47s
Laravel Larastan / larastan (pull_request) Failing after 3m12s
2026-06-18 17:53:14 +05:30
6169625b67 Merge pull request 'removed unwanted logic in panel box validation' (#774) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #774
2026-06-18 12:20:37 +00:00
dhanabalan
30ac265f71 removed unwanted logic in panel box validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 1m50s
Laravel Larastan / larastan (pull_request) Failing after 3m36s
2026-06-18 17:50:22 +05:30
fd73596c66 Merge pull request 'Chnaged schedule time of import transit mail' (#773) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 32s
Reviewed-on: #773
2026-06-18 12:14:15 +00:00
dhanabalan
9cf817e304 Chnaged schedule time of import transit mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 1m53s
Laravel Larastan / larastan (pull_request) Failing after 4m0s
2026-06-18 17:44:00 +05:30
9eeec6b3d2 Merge pull request 'Added logic in panel box' (#772) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #772
2026-06-18 11:45:16 +00:00
dhanabalan
b0f13d9b57 Added logic in panel box
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 1m47s
Laravel Larastan / larastan (pull_request) Failing after 3m15s
2026-06-18 17:15:01 +05:30
8385065c6c Merge pull request 'Issue solved in production characteristics' (#771) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m13s
Reviewed-on: #771
2026-06-18 11:17:06 +00:00
dhanabalan
8cb76196bc Issue solved in production characteristics
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 1m49s
Laravel Larastan / larastan (pull_request) Failing after 3m49s
2026-06-18 16:46:52 +05:30
abdfd362cc Merge pull request 'Solved issue in panel box validation' (#770) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 28s
Reviewed-on: #770
2026-06-18 10:59:39 +00:00
dhanabalan
c1f5d232ac Solved issue in panel box validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m43s
Laravel Larastan / larastan (pull_request) Failing after 3m29s
2026-06-18 16:29:26 +05:30
c07ad779a5 Merge pull request 'Added logic is in production characteristics page' (#769) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #769
2026-06-18 10:44:29 +00:00
dhanabalan
be4611d863 Added logic is in production characteristics page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 1m43s
Laravel Larastan / larastan (pull_request) Failing after 3m29s
2026-06-18 16:14:17 +05:30
aa2a8cc6e9 Merge pull request 'Added logic in panel check list livewire page' (#768) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 20s
Reviewed-on: #768
2026-06-18 10:30:29 +00:00
dhanabalan
4301b4b19a Added logic in panel check list livewire page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 13s
Laravel Larastan / larastan (pull_request) Failing after 33s
Laravel Pint / pint (pull_request) Successful in 3m29s
2026-06-18 16:00:13 +05:30
fb29da0bdd Merge pull request 'Added logic in guard patrol entry page' (#767) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m19s
Reviewed-on: #767
2026-06-18 09:30:30 +00:00
dhanabalan
82cfd81a8a Added logic in guard patrol entry page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Laravel Pint / pint (pull_request) Successful in 1m59s
Laravel Larastan / larastan (pull_request) Failing after 4m58s
2026-06-18 15:00:11 +05:30
fabda51ef7 Merge pull request 'Added created by column in check panel list' (#766) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 21s
Reviewed-on: #766
2026-06-18 07:08:24 +00:00
dhanabalan
687f4367c4 Added created by column in check panel list
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 1m49s
Laravel Larastan / larastan (pull_request) Failing after 3m19s
2026-06-18 12:38:06 +05:30
9a54308441 Merge pull request 'ranjith-dev' (#765) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Reviewed-on: #765
2026-06-18 06:51:04 +00:00
dhanabalan
18cd1938a5 Added panel check list livewire file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Laravel Pint / pint (pull_request) Successful in 3m23s
Laravel Larastan / larastan (pull_request) Failing after 3m44s
2026-06-18 12:20:23 +05:30
dhanabalan
66a35d2796 Added panel checklist wrapper blade file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 14s
2026-06-18 12:18:36 +05:30
dhanabalan
3e8ab512d6 Added panel box validation policy file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-06-18 12:17:58 +05:30
dhanabalan
fde2208c85 Added panel box validation resource pages
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-06-18 12:15:18 +05:30
dhanabalan
c99aea0d3a Added panel box validation model file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-06-18 12:13:23 +05:30
dhanabalan
f7e5144484 Added panel box validation migration file
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-06-18 12:12:32 +05:30
d61bcf4f6d Merge pull request 'Added filter logic in line resource page' (#764) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Reviewed-on: #764
2026-06-18 03:12:38 +00:00
dhanabalan
58bfd4cbf8 Added filter logic in line resource page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 6m51s
Laravel Larastan / larastan (pull_request) Failing after 8m34s
2026-06-18 08:42:22 +05:30
bd722da07b Merge pull request 'Added logic to show only in time records in visiotr entries' (#763) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #763
2026-06-17 12:04:17 +00:00
dhanabalan
a5f1432bfd Added logic to show only in time records in visiotr entries
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 28s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 20s
Laravel Larastan / larastan (pull_request) Failing after 2m57s
Laravel Pint / pint (pull_request) Successful in 3m47s
2026-06-17 17:34:00 +05:30
20583ee55b Merge pull request 'Change import transit time for mail' (#762) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #762
2026-06-17 12:01:36 +00:00
dhanabalan
02db70c0bd Change import transit time for mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 2m23s
Laravel Larastan / larastan (pull_request) Failing after 4m3s
2026-06-17 17:31:20 +05:30
c81769aeae Merge pull request 'Added filter logic in import transit resource page' (#761) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #761
2026-06-17 07:31:41 +00:00
dhanabalan
1d6a914c04 Added filter logic in import transit resource page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 1m57s
Laravel Larastan / larastan (pull_request) Failing after 3m21s
2026-06-17 13:01:08 +05:30
841526e1cd Merge pull request 'Added mesage in import transit mail' (#760) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #760
2026-06-17 07:23:50 +00:00
dhanabalan
0e1d823581 Added mesage in import transit mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m3s
Laravel Larastan / larastan (pull_request) Failing after 3m21s
2026-06-17 12:53:32 +05:30
b39067d7f8 Merge pull request 'solved issue for shipped invoice date and eta date in import transit mail' (#759) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Reviewed-on: #759
2026-06-17 06:36:47 +00:00
dhanabalan
2a57b87bfa solved issue for shipped invoice date and eta date in import transit mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 10s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Larastan / larastan (pull_request) Failing after 1m20s
Laravel Pint / pint (pull_request) Failing after 1m19s
2026-06-17 12:06:29 +05:30
02990f1f5d Merge pull request 'Changed logic for eta date and etd date in import transit mail' (#758) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #758
2026-06-17 05:49:47 +00:00
dhanabalan
8d8e433ce9 Changed logic for eta date and etd date in import transit mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 14s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Larastan / larastan (pull_request) Failing after 1m35s
Laravel Pint / pint (pull_request) Failing after 1m33s
2026-06-17 11:19:20 +05:30
7f773c6b92 Merge pull request 'Added item description in characteristic approval mail template' (#757) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Reviewed-on: #757
2026-06-17 04:18:20 +00:00
dhanabalan
afcbadaee0 Added item description in characteristic approval mail template
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 21s
Laravel Larastan / larastan (pull_request) Failing after 1m37s
Laravel Pint / pint (pull_request) Failing after 1m35s
2026-06-17 09:47:51 +05:30
838a1bb731 Merge pull request 'issue solved in sub assembly code in testing panel readings' (#756) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 29s
Reviewed-on: #756
2026-06-15 09:02:43 +00:00
dhanabalan
e5cb8241eb issue solved in sub assembly code in testing panel readings
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m57s
Laravel Larastan / larastan (pull_request) Failing after 3m29s
2026-06-15 14:32:28 +05:30
ecfda1b739 Merge pull request 'Changed time of import transit mail report' (#755) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Failing after 20s
Reviewed-on: #755
2026-06-15 04:16:44 +00:00
dhanabalan
75836e3159 Changed time of import transit mail report
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Failing after 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Failing after 4s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Laravel Pint / pint (pull_request) Successful in 1m57s
Laravel Larastan / larastan (pull_request) Failing after 3m46s
2026-06-15 09:46:31 +05:30
e616a66278 Merge pull request 'Added mail logic for to and cc for quality validation' (#754) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #754
2026-06-15 03:54:08 +00:00
dhanabalan
bfb8fcde29 Added mail logic for to and cc for quality validation
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 1m22s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 48s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 2m2s
Laravel Pint / pint (pull_request) Successful in 2m21s
Laravel Larastan / larastan (pull_request) Failing after 4m5s
2026-06-15 09:23:53 +05:30
f99bc12603 Merge pull request 'Added logic to slect default ok button in checklist of quality' (#752) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 21s
Reviewed-on: #752
2026-06-13 11:30:24 +00:00
dhanabalan
2b3d423769 Added logic to slect default ok button in checklist of quality
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m55s
Laravel Larastan / larastan (pull_request) Failing after 3m23s
2026-06-13 17:00:09 +05:30
efd469e07d Merge pull request 'Updated PUMP SET model as PUMPSET on request approval' (#751) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 34s
Reviewed-on: #751
2026-06-13 09:45:20 +00:00
dhanabalan
e0ed67dfc0 Updated PUMP SET model as PUMPSET on request approval
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Laravel Pint / pint (pull_request) Successful in 2m23s
Laravel Larastan / larastan (pull_request) Failing after 4m21s
2026-06-13 15:14:43 +05:30
dd88bdca78 Merge pull request 'Removed unique rfq number in import transaction page' (#750) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 19s
Reviewed-on: #750
2026-06-13 07:10:13 +00:00
dhanabalan
efd5416ced Removed unique rfq number in import transaction page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 14s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Laravel Pint / pint (pull_request) Successful in 1m53s
Laravel Larastan / larastan (pull_request) Failing after 3m16s
2026-06-13 12:39:24 +05:30
229a69b82a Merge pull request 'Changed body message of import transit mail' (#749) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 22s
Reviewed-on: #749
2026-06-13 06:43:05 +00:00
dhanabalan
03df2f50dc Changed body message of import transit mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 2m3s
Laravel Larastan / larastan (pull_request) Failing after 3m37s
2026-06-13 12:12:47 +05:30
3d404d93ef Merge pull request 'Added sort of rfq number logic in import transit mail' (#748) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 22s
Reviewed-on: #748
2026-06-13 05:36:45 +00:00
dhanabalan
aaaa021597 Added sort of rfq number logic in import transit mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 2m29s
Laravel Larastan / larastan (pull_request) Failing after 4m3s
2026-06-13 11:06:25 +05:30
d1f170440c Merge pull request 'Changed report time for import transit mail' (#747) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #747
2026-06-13 05:27:05 +00:00
dhanabalan
78961a7436 Changed report time for import transit mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 29s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 19s
Laravel Pint / pint (pull_request) Successful in 2m12s
Laravel Larastan / larastan (pull_request) Failing after 3m54s
2026-06-13 10:56:52 +05:30
01bda8f736 Merge pull request 'Adjusted logic for mobile an dtab screen resolution for quality check' (#746) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #746
2026-06-13 05:25:01 +00:00
dhanabalan
f0bb74690f Adjusted logic for mobile an dtab screen resolution for quality check
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Laravel Pint / pint (pull_request) Successful in 1m56s
Laravel Larastan / larastan (pull_request) Failing after 3m39s
2026-06-13 10:54:41 +05:30
0b83b7cb22 Merge pull request 'Removed form box of ref number from import transit page' (#745) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #745
2026-06-13 04:32:28 +00:00
dhanabalan
88e00b2f8a Removed form box of ref number from import transit page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 2m5s
Laravel Larastan / larastan (pull_request) Failing after 3m24s
2026-06-13 10:02:13 +05:30
3bb3674d39 Merge pull request 'Added proper subject name for import transit mail' (#744) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 21s
Reviewed-on: #744
2026-06-13 03:27:05 +00:00
dhanabalan
ab79a2235a Added proper subject name for import transit mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m22s
Laravel Larastan / larastan (pull_request) Failing after 3m38s
2026-06-13 08:56:47 +05:30
f02598feeb Merge pull request 'Changed label name of ref number in import tranist page' (#743) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 22s
Reviewed-on: #743
2026-06-13 03:13:18 +00:00
dhanabalan
c17bc3be3a Changed label name of ref number in import tranist page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 1m55s
Laravel Larastan / larastan (pull_request) Failing after 3m34s
2026-06-13 08:43:04 +05:30
f84a579224 Merge pull request 'Changed font size for all column text values in import tranist mail' (#742) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #742
2026-06-13 03:06:28 +00:00
dhanabalan
4edac7987d Changed font size for all column text values in import tranist mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 14s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m4s
Laravel Larastan / larastan (pull_request) Failing after 3m34s
2026-06-13 08:35:37 +05:30
15241feae2 Merge pull request 'corrected spell mistake of searchable in import transit' (#741) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #741
2026-06-13 02:53:48 +00:00
dhanabalan
9cbeb5166f corrected spell mistake of searchable in import transit
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 2m19s
Laravel Larastan / larastan (pull_request) Failing after 3m58s
2026-06-13 08:23:35 +05:30
4915d12c7d Merge pull request 'Added searchable in import transit and change tto inv value as text input' (#740) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 24s
Reviewed-on: #740
2026-06-13 02:49:15 +00:00
dhanabalan
46f1ecd7be Added searchable in import transit and change tto inv value as text input
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Laravel Pint / pint (pull_request) Successful in 2m1s
Laravel Larastan / larastan (pull_request) Failing after 3m29s
2026-06-13 08:18:49 +05:30
44779683fd Merge pull request 'Added import transit excel attachment logic in mail' (#739) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
Reviewed-on: #739
2026-06-12 03:50:24 +00:00
dhanabalan
05a3c9f7ac Added import transit excel attachment logic in mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Laravel Pint / pint (pull_request) Successful in 2m11s
Laravel Larastan / larastan (pull_request) Failing after 3m28s
2026-06-12 09:20:03 +05:30
82cb39feb5 Merge pull request 'Added import transit export excel file page' (#738) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #738
2026-06-11 04:13:47 +00:00
dhanabalan
3c5f9f7273 Added import transit export excel file page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Successful in 2m14s
Laravel Larastan / larastan (pull_request) Failing after 3m38s
2026-06-11 09:43:30 +05:30
9db03a4c56 Merge pull request 'added left alignment logic for all columns' (#737) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 26s
Reviewed-on: #737
2026-06-10 06:07:27 +00:00
dhanabalan
cef8415b2c added left alignment logic for all columns
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 19s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 12m36s
Laravel Larastan / larastan (pull_request) Failing after 14m26s
2026-06-10 11:37:10 +05:30
3140a1e88d Merge pull request 'changed logic by default loading of of data in table list of asrs' (#736) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #736
2026-06-10 03:53:20 +00:00
dhanabalan
7b71f07f39 changed logic by default loading of of data in table list of asrs
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 53s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 1m5s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 40s
Laravel Pint / pint (pull_request) Successful in 10m23s
Laravel Larastan / larastan (pull_request) Failing after 17m59s
2026-06-10 09:22:58 +05:30
58b2df8d94 Merge pull request 'Added body in import transit mail of mail' (#735) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Reviewed-on: #735
2026-06-09 08:58:20 +00:00
dhanabalan
4bade21e10 Added body in import transit mail of mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 5m52s
Laravel Larastan / larastan (pull_request) Failing after 15m48s
2026-06-09 14:28:06 +05:30
e9eb5539d3 Merge pull request 'Added logic for fetch against visitor names' (#734) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #734
2026-06-09 07:13:27 +00:00
dhanabalan
e103755a8b Added logic for fetch against visitor names
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Larastan / larastan (pull_request) Failing after 7m11s
Laravel Pint / pint (pull_request) Failing after 15m27s
2026-06-09 12:43:07 +05:30
aa403f00c0 Merge pull request 'ranjith-dev' (#733) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #733
2026-06-09 05:54:12 +00:00
dhanabalan
2ec549019e Added In and out logic in gate out entry page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 14s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 17s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Larastan / larastan (pull_request) Failing after 15m44s
Laravel Pint / pint (pull_request) Failing after 15m43s
2026-06-09 11:23:51 +05:30
dhanabalan
72274d6f47 solved issue in entering mobile number logic in visitor create page
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-06-09 11:23:11 +05:30
dhanabalan
9d23f7f3e8 Added mode of travel in visitor resource page and only shows todays records
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-06-09 11:22:27 +05:30
dhanabalan
e0ab003852 Added column in model file of visitor entry page
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-06-09 11:19:56 +05:30
dhanabalan
769a034167 Added mode of travel column in visitor entry page
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
2026-06-09 11:18:50 +05:30
c5fe2379e7 Merge pull request 'Chnaged logic in create visitor entry page' (#732) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Reviewed-on: #732
2026-06-09 04:19:45 +00:00
dhanabalan
12490c0a23 Chnaged logic in create visitor entry page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 24s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 22s
Laravel Pint / pint (pull_request) Failing after 4m46s
Laravel Larastan / larastan (pull_request) Failing after 27m19s
2026-06-09 09:48:49 +05:30
03d620607d Merge pull request 'remove dfe columns and adjusted alignment in import transit mail' (#731) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #731
2026-06-08 13:19:11 +00:00
dhanabalan
461188788b remove dfe columns and adjusted alignment in import transit mail
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 7m14s
Laravel Larastan / larastan (pull_request) Failing after 8m53s
2026-06-08 18:48:56 +05:30
bfdaef7cec Merge pull request 'Added logic in part validation 1 for pipeline' (#730) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 23s
Reviewed-on: #730
2026-06-08 12:31:34 +00:00
dhanabalan
27fc3e2cbf Added logic in part validation 1 for pipeline
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 15s
Laravel Pint / pint (pull_request) Successful in 7m47s
Laravel Larastan / larastan (pull_request) Failing after 8m49s
2026-06-08 18:01:17 +05:30
bd15298ee8 Merge pull request 'Added logic to show plant names in visitor entry page' (#729) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 14s
Reviewed-on: #729
2026-06-08 11:15:20 +00:00
dhanabalan
24865267a2 Added logic to show plant names in visitor entry page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 17s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 20s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Larastan / larastan (pull_request) Failing after 4m16s
Laravel Pint / pint (pull_request) Failing after 4m23s
2026-06-08 16:45:03 +05:30
14ec323086 Merge pull request 'added three columns in import transit exporter' (#728) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 25s
Reviewed-on: #728
2026-06-08 08:49:26 +00:00
dhanabalan
be0a0cc78e added three columns in import transit exporter
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 18s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Laravel Pint / pint (pull_request) Successful in 8m9s
Laravel Larastan / larastan (pull_request) Failing after 8m56s
2026-06-08 14:19:09 +05:30
ab2211cf85 Merge pull request 'changed logic in visitor badge blade file' (#727) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Reviewed-on: #727
2026-06-08 06:34:04 +00:00
dhanabalan
9ce11ed5ff changed logic in visitor badge blade file
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 14s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 28s
Laravel Pint / pint (pull_request) Successful in 8m28s
Laravel Larastan / larastan (pull_request) Failing after 8m57s
2026-06-08 12:03:49 +05:30
20de7e9b71 Merge pull request 'Added logic for gate out entry for out time' (#726) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Reviewed-on: #726
2026-06-08 05:27:49 +00:00
dhanabalan
f7bfc1373d Added logic for gate out entry for out time
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 15s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 15s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 34s
Laravel Pint / pint (pull_request) Successful in 13m14s
Laravel Larastan / larastan (pull_request) Failing after 15m42s
2026-06-08 10:56:35 +05:30
d935e5044d Merge pull request 'Added company and in table list in visitor resource page' (#725) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Reviewed-on: #725
2026-06-08 05:14:42 +00:00
dhanabalan
f00cc4c386 Added company and in table list in visitor resource page
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 11s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 16s
Laravel Pint / pint (pull_request) Failing after 4m38s
Laravel Larastan / larastan (pull_request) Failing after 8m1s
2026-06-08 10:44:25 +05:30
deaeaa4754 Merge pull request 'Added charset in print panel in production order' (#724) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 41s
Reviewed-on: #724
2026-06-08 03:57:57 +00:00
dhanabalan
e59acd6458 Added charset in print panel in production order
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 31s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 23s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Laravel Larastan / larastan (pull_request) Failing after 8m5s
Laravel Pint / pint (pull_request) Successful in 4m48s
2026-06-08 09:27:39 +05:30
97aed0a4b1 Merge pull request 'added logic in print item of production order' (#723) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #723
2026-06-08 03:53:59 +00:00
dhanabalan
84634302b1 added logic in print item of production order
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 34s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 27s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 17s
Laravel Larastan / larastan (pull_request) Failing after 7m18s
Laravel Pint / pint (pull_request) Successful in 8m12s
2026-06-08 09:23:37 +05:30
acab42ee6b Merge pull request 'issue solved of showing 1/2 inch number in item description of producion order' (#722) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 50s
Reviewed-on: #722
2026-06-08 03:50:36 +00:00
dhanabalan
46e5a46121 issue solved of showing 1/2 inch number in item description of producion order
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 38s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 39s
Laravel Pint / pint (pull_request) Failing after 13s
Laravel Larastan / larastan (pull_request) Failing after 10m56s
2026-06-08 09:20:20 +05:30
16f1937e9c Merge pull request 'changed updated logic for import transit' (#721) from ranjith-dev into master
All checks were successful
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Successful in 16s
Reviewed-on: #721
2026-06-07 09:07:50 +00:00
dhanabalan
59e6bd7b10 changed updated logic for import transit
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Failing after 9m50s
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Successful in 4m2s
Gemini PR Review / Gemini PR Review (pull_request) Failing after 13m47s
Laravel Larastan / larastan (pull_request) Failing after 6m35s
Laravel Pint / pint (pull_request) Failing after 6m34s
2026-06-07 14:37:35 +05:30
200 changed files with 19263 additions and 1835 deletions

View File

@@ -337,7 +337,7 @@ class Scheduler extends Command
}
break;
case 'Daily':
if (now()->format('H:i') == '11:10') {
if (now()->format('H:i') == '08:00') {
try {
\Artisan::call('send-import-transit', [
'schedule_type' => $rule->schedule_type,

View File

@@ -4,9 +4,13 @@ namespace App\Console\Commands;
use App\Mail\ImportTransitMail;
use App\Models\AlertMailRule;
use App\Models\EmployeeMaster;
use App\Models\ImportTransit;
use App\Models\Plant;
use Filament\Facades\Filament;
use Illuminate\Console\Command;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\ImportTransitReportExport;
class SendImportTransit extends Command
{
@@ -51,44 +55,14 @@ class SendImportTransit extends Command
return;
}
// $todayRecordExists = ImportTransit::whereDate('created_at', now()->toDateString())->first();
$tableData = ImportTransit::where('status', '!=', 'Delivered')->orderByRaw("
CASE
WHEN cri_rfq_number ~ '[0-9]+'
THEN CAST(regexp_replace(cri_rfq_number, '[^0-9]', '', 'g') AS INTEGER)
ELSE NULL
END NULLS LAST
")->get();
// if (!$todayRecordExists) {
// $this->info('No records created today. Mail not sent.');
// return;
// }
$tableData = ImportTransit::select([
'cri_rfq_number',
'mail_received_date',
'pricol_ref_number',
'requester',
'shipper',
'shipper_location',
'shipper_invoice',
'shipper_invoice_date',
'customs_agent_name',
'eta_date',
'status',
'delivery_location',
'etd_date',
'mode',
'inco_terms',
'port_of_loading',
'port_of_discharge',
'delivery_city',
'packages',
'type_of_package',
'gross_weight',
'volume',
'bill_number',
'bill_received_date',
'vessel_number',
'remark',
'is_transit_identified',
])
->where('status', '!=', 'Delivered')
->get();
if ($tableData->isEmpty()) {
$this->info('No pending Import Transit records found. Mail skipped.');
@@ -101,10 +75,30 @@ class SendImportTransit extends Command
$mailSubject = 'Daily Import Transit Report';
$fileName = 'reports/pending_import_shipment_' . now()->format('Ymd_His') . '.xlsx';
Excel::store(
new ImportTransitReportExport($tableData),
$fileName,
'local'
);
$updatedBy = $tableData->last()?->updated_by;
$employee = EmployeeMaster::where('code', $updatedBy)
->select('name', 'mobile_number')
->first();
$employeeName = $employee?->name;
$mobileNumber = $employee?->mobile_number;
$mail = new ImportTransitMail(
$scheduleType,
$tableData,
$mailSubject
$mailSubject,
$fileName,
$employeeName,
$mobileNumber,
);
$toEmails = collect(explode(',', $rule->email))
@@ -130,11 +124,9 @@ class SendImportTransit extends Command
->cc($ccEmails)
->send($mail);
$this->info(
"Mail sent → Rule {$rule->id} | To: " . implode(', ', $toEmails)
);
}
$this->info("Mail sent → Rule {$rule->id} | To: " . implode(', ', $toEmails));
}
}
}
}

View File

@@ -68,7 +68,7 @@ class SendVehicleReport extends Command
'type',
])
->where('plant_id', $plant->id)
->whereBetween('created_at', [$startDate, $endDate])
->whereBetween('entry_time', [$startDate, $endDate])
->get();
if ($vehicleEntries->isEmpty()) {

View File

@@ -0,0 +1,97 @@
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithEvents;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use Illuminate\Support\Facades\Log;
use Maatwebsite\Excel\Events\AfterSheet;
class ImportTransitReportExport implements FromCollection, WithHeadings, WithMapping, WithEvents
{
protected $data;
public function __construct($data)
{
$this->data = $data;
}
public function headings(): array
{
return [
'No',
'CRI RFQ Number',
'Requestor',
'Shipper',
'Shipper Location',
'Shipper Invoice',
'Shipper Invoice Date',
'Custom Agent Name',
'ETA',
'Status',
'Delivery Location',
'ETD Date',
'Remark',
];
}
public function collection()
{
return collect($this->data);
}
public function map($row): array
{
static $srNo = 0;
$srNo++;
return [
$srNo,
$row->cri_rfq_number,
$row->requester,
$row->shipper,
$row->shipper_location,
$row->shipper_invoice,
$row->shipper_invoice_date,
$row->customs_agent_name,
$row->eta_date,
$row->status,
$row->delivery_location,
$row->etd_date,
$row->remark,
];
}
public function registerEvents(): array
{
return [
AfterSheet::class => function (AfterSheet $event) {
$rowNumber = 2; // Excel row starts after header
foreach ($this->data as $row) {
if ((int) $row->is_transit_identified == 1) {
$event->sheet
->getStyle("A{$rowNumber}:M{$rowNumber}")
->applyFromArray([
'fill' => [
'fillType' => Fill::FILL_SOLID,
'startColor' => [
'rgb' => 'FFFF00',
],
],
]);
}
$rowNumber++;
}
},
];
}
}

View File

@@ -0,0 +1,68 @@
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Illuminate\Support\Collection;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use PhpOffice\PhpSpreadsheet\Cell\Cell;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder;
use Maatwebsite\Excel\Concerns\WithCustomValueBinder;
class SerialExport extends DefaultValueBinder implements FromCollection, WithHeadings, WithCustomValueBinder
, WithColumnFormatting
{
/**
* @return \Illuminate\Support\Collection
*/
protected $itemCode;
protected $fromSerial;
protected $toSerial;
public function __construct($itemCode, $fromSerial, $toSerial)
{
$this->itemCode = $itemCode;
$this->fromSerial = $fromSerial;
$this->toSerial = $toSerial;
}
public function bindValue(Cell $cell, $value)
{
$cell->setValueExplicit((string) $value, DataType::TYPE_STRING);
return true;
}
public function collection()
{
$rows = [];
for ($i = $this->fromSerial; $i <= $this->toSerial; $i++) {
$rows[] = [
'item_code' => $this->itemCode,
'serial_number' => str_pad($i, 6, '0', STR_PAD_LEFT),
];
}
return new Collection($rows);
}
public function columnFormats(): array
{
return [
'B' => NumberFormat::FORMAT_TEXT,
];
}
public function headings(): array
{
return [
'Item Code',
'Serial Number',
];
}
}

View File

@@ -41,6 +41,8 @@ class AlertMailRuleExporter extends Exporter
$plant = Plant::find($state);
return $plant ? $plant->code : 'Unknown';
}),
ExportColumn::make('machine.work_center')
->label('WORK CENTER'),
ExportColumn::make('cc_emails')
->label('CC EMAILS'),
ExportColumn::make('invoiceMaster.receiving_plant_name')

View File

@@ -0,0 +1,83 @@
<?php
namespace App\Filament\Exports;
use App\Models\BeforeTestReading;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class BeforeTestReadingExporter extends Exporter
{
protected static ?string $model = BeforeTestReading::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
// ExportColumn::make('id')
// ->label('ID'),
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('line.name')
->label('LINE NAME'),
ExportColumn::make('machine.name')
->label('MACHINE NAME'),
ExportColumn::make('motorTestingMaster.item.code')
->label('ITEM CODE'),
ExportColumn::make('motorTestingMaster.item.description')
->label('MODEL DESCRIPTION'),
ExportColumn::make('serial_number')
->label('SERIAL NUMBER'),
ExportColumn::make('motorTestingMaster.kw')
->label('KW'),
ExportColumn::make('motorTestingMaster.hp')
->label('HP'),
ExportColumn::make('motorTestingMaster.phase')
->label('PHASE'),
ExportColumn::make('motorTestingMaster.connection')
->label('CONNECTION'),
ExportColumn::make('motorTestingMaster.isi_model')
->label('ISI MODEL'),
ExportColumn::make('before_fr_res_ry')
->label('BEFORE FR RESISTANCE RY'),
ExportColumn::make('before_fr_res_yb')
->label('BEFORE FR RESISTANCE YB'),
ExportColumn::make('before_fr_res_br')
->label('BEFORE FR RESISTANCE BR'),
ExportColumn::make('before_fr_ir')
->label('BEFORE FR IR'),
ExportColumn::make('tested_by')
->label('TESTED BY'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('scanned_at')
->label('SCANNED AT'),
ExportColumn::make('deleted_at')
->enabledByDefault(false)
->label('DELETED AT'),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your before test reading export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';
}
return $body;
}
}

View File

@@ -300,6 +300,8 @@ class ClassCharacteristicExporter extends Exporter
->label('ZQMM QTY'),
ExportColumn::make('zmm_operating_temperature')
->label('ZMM OPERATING TEMPERATURE'),
ExportColumn::make('zmm_axial_force')
->label('ZMM AXIAL FORCE'),
ExportColumn::make('mark_status')
->label('MARKED STATUS'),
ExportColumn::make('marked_datetime')

View File

@@ -0,0 +1,64 @@
<?php
namespace App\Filament\Exports;
use App\Models\DealerVisitPlan;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class DealerVisitPlanExporter extends Exporter
{
protected static ?string $model = DealerVisitPlan::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('name')
->label('DEALER NAME'),
ExportColumn::make('company')
->label('DEALER COMPANY'),
ExportColumn::make('visit_plan_date')
->label('VISIT PLAN DATE'),
ExportColumn::make('organizer')
->label('ORGANIZER'),
ExportColumn::make('employeeMaster.name')
->label('RECIPIENT NAME'),
ExportColumn::make('number_of_person')
->label('NUMBER OF PERSON'),
ExportColumn::make('purpose_of_visit')
->label('PURPOSE OF VISIT'),
ExportColumn::make('status')
->label('STATUS'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your dealer visit plan export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -36,12 +36,18 @@ class ImportTransitExporter extends Exporter
->label('SHIPPER INVOICE'),
ExportColumn::make('shipper_invoice_date')
->label('SHIPPER INVOICE DATE'),
ExportColumn::make('inv_value')
->label('Inv Value'),
ExportColumn::make('freight_charge')
->label('Freight Charge'),
ExportColumn::make('customs_agent_name')
->label('CUSTOMS AGENT NAME'),
ExportColumn::make('eta_date')
->label('ETA DATE'),
ExportColumn::make('status')
->label('STATUS'),
ExportColumn::make('insurance_status')
->label('Insurance Status'),
ExportColumn::make('delivery_location')
->label('DELIVERY LOCATION'),
ExportColumn::make('etd_date')

View File

@@ -36,15 +36,6 @@ class InvoiceValidationExporter extends Exporter
->label('ITEM DESCRIPTION'),
ExportColumn::make('stickerMaster.item.uom')
->label('UNIT OF MEASURE'),
ExportColumn::make('stickerMaster.material_type')
->label('MATERIAL TYPE')
->formatStateUsing(fn ($state) => match ($state) {
1 => 'Individual',
2 => 'Bundle',
3 => 'Quantity',
4 => 'Bundle Individual',
default => '-',
}),
ExportColumn::make('motor_scanned_status')
->label('MOTOR SCANNED STATUS'),
ExportColumn::make('pump_scanned_status')
@@ -65,10 +56,6 @@ class InvoiceValidationExporter extends Exporter
->label('LOAD RATE'),
ExportColumn::make('upload_status')
->label('UPLOAD STATUS'),
ExportColumn::make('batch_number')
->label('BATCH NUMBER'),
ExportColumn::make('quantity')
->label('QUANTITY'),
ExportColumn::make('operator_id')
->label('OPERATOR ID'),
ExportColumn::make('created_at')
@@ -90,7 +77,7 @@ class InvoiceValidationExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your invoice validation export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
$body = 'Your serial invoice validation export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';

View File

@@ -0,0 +1,355 @@
<?php
namespace App\Filament\Exports;
use App\Models\ItemCharacteristic;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class ItemCharacteristicExporter extends Exporter
{
protected static ?string $model = ItemCharacteristic::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.name')
->label('PLANT'),
ExportColumn::make('item.code')
->label('ITEM CODE'),
ExportColumn::make('class')
->label('CLASS'),
ExportColumn::make('zz1_cn_bill_ord')
->label('ZZ1 CN BILL ORDER'),
ExportColumn::make('zmm_amps')
->label('ZMM AMPS'),
ExportColumn::make('zmm_brand')
->label('ZMM BRAND'),
ExportColumn::make('zmm_degreeofprotection')
->label('ZMM DEGREE OF PROTECTION'),
ExportColumn::make('zmm_delivery')
->label('ZMM DELIVERY'),
ExportColumn::make('zmm_dir_rot')
->label('ZMM DIRECTION OF ROTATION'),
ExportColumn::make('zmm_discharge')
->label('ZMM DISCHARGE'),
ExportColumn::make('zmm_discharge_max')
->label('ZMM DISCHARGE MAX'),
ExportColumn::make('zmm_discharge_min')
->label('ZMM DISCHARGE MIN'),
ExportColumn::make('zmm_duty')
->label('ZMM DUTY'),
ExportColumn::make('zmm_eff_motor')
->label('ZMM EFF MOTOR'),
ExportColumn::make('zmm_eff_pump')
->label('ZMM EFF PUMP'),
ExportColumn::make('zmm_frequency')
->label('ZMM FREQUENCY'),
ExportColumn::make('zmm_head')
->label('ZMM HEAD'),
ExportColumn::make('zmm_heading')
->label('ZMM HEADING'),
ExportColumn::make('zmm_head_max')
->label('ZMM HEAD MAX'),
ExportColumn::make('zmm_head_minimum')
->label('ZMM HEAD MINIMUM'),
ExportColumn::make('zmm_idx_eff_mtr')
->label('ZMM IDX EFF MTR'),
ExportColumn::make('zmm_idx_eff_pump')
->label('ZMM IDX EFF PUMP'),
ExportColumn::make('zmm_kvacode')
->label('ZMM KVACODE'),
ExportColumn::make('zmm_maxambtemp')
->label('ZMM MAXAMB TEMP'),
ExportColumn::make('zmm_mincoolingflow')
->label('ZMM MIN COOLING FLOW'),
ExportColumn::make('zmm_motorseries')
->label('ZMM MOTOR SERIES'),
ExportColumn::make('zmm_motor_model')
->label('ZMM MOTOR MODEL'),
ExportColumn::make('zmm_outlet')
->label('ZMM OUTLET'),
ExportColumn::make('zmm_phase')
->label('ZMM PHASE'),
ExportColumn::make('zmm_pressure')
->label('ZMM PRESSURE'),
ExportColumn::make('zmm_pumpflowtype')
->label('ZMM PUMP FLOW TYPE'),
ExportColumn::make('zmm_pumpseries')
->label('ZMM PUMP SERIES'),
ExportColumn::make('zmm_pump_model')
->label('ZMM PUMP MODEL'),
ExportColumn::make('zmm_ratedpower')
->label('ZMM RATED POWER'),
ExportColumn::make('zmm_region')
->label('ZMM REGION'),
ExportColumn::make('zmm_servicefactor')
->label('ZMM SERVICE FACTOR'),
ExportColumn::make('zmm_servicefactormaximumamps')
->label('ZMM SERVICE FACTOR MAXIMUM AMPS'),
ExportColumn::make('zmm_speed')
->label('ZMM SPEED'),
ExportColumn::make('zmm_suction')
->label('ZMM SUCTION'),
ExportColumn::make('zmm_suctionxdelivery')
->label('ZMM SUCTION X DELIVERY'),
ExportColumn::make('zmm_supplysource')
->label('ZMM SUPPLY SOURCE'),
ExportColumn::make('zmm_temperature')
->label('ZMM TEMPERATURE'),
ExportColumn::make('zmm_thrustload')
->label('ZMM THRUST LOAD'),
ExportColumn::make('zmm_volts')
->label('ZMM VOLTS'),
ExportColumn::make('zmm_wire')
->label('ZMM WIRE'),
ExportColumn::make('zmm_package')
->label('ZMM PACKAGE'),
ExportColumn::make('zmm_pvarrayrating')
->label('ZMM PV ARRAY RATING'),
ExportColumn::make('zmm_isi')
->label('ZMM ISI'),
ExportColumn::make('zmm_isimotor')
->label('ZMM ISI MOTOR'),
ExportColumn::make('zmm_isipump')
->label('ZMM ISI PUMP'),
ExportColumn::make('zmm_isipumpset')
->label('ZMM ISI PUMPSET'),
ExportColumn::make('zmm_pumpset_model')
->label('ZMM PUMPSET MODEL'),
ExportColumn::make('zmm_stages')
->label('ZMM STAGES'),
ExportColumn::make('zmm_headrange')
->label('ZMM HEAD RANGE'),
ExportColumn::make('zmm_overall_efficiency')
->label('ZMM OVERALL EFFICIENCY'),
ExportColumn::make('zmm_connection')
->label('ZMM CONNECTION'),
ExportColumn::make('zmm_min_bore_size')
->label('ZMM MIN BORE SIZE'),
ExportColumn::make('zmm_isireference')
->label('ZMM ISI REFERENCE'),
ExportColumn::make('zmm_category')
->label('ZMM CATEGORY'),
ExportColumn::make('zmm_submergence')
->label('ZMM SUBMERGENCE'),
ExportColumn::make('zmm_capacitorstart')
->label('ZMM CAPACITOR START'),
ExportColumn::make('zmm_capacitorrun')
->label('ZMM CAPACITOR RUN'),
ExportColumn::make('zmm_inch')
->label('ZMM INCH'),
ExportColumn::make('zmm_motor_type')
->label('ZMM MOTOR TYPE'),
ExportColumn::make('zmm_dismantle_direction')
->label('ZMM DISMANTLE DIRECTION'),
ExportColumn::make('zmm_eff_ovrall')
->label('ZMM EFF OVRALL'),
ExportColumn::make('zmm_bodymoc')
->label('ZMM BODY MOC'),
ExportColumn::make('zmm_rotormoc')
->label('ZMM ROTOR MOC'),
ExportColumn::make('zmm_dlwl')
->label('ZMM DLWL'),
ExportColumn::make('zmm_inputpower')
->label('ZMM INPUT POWER'),
ExportColumn::make('zmm_imp_od')
->label('ZMM IMP OD'),
ExportColumn::make('zmm_ambtemp')
->label('ZMM AMBTEMP'),
ExportColumn::make('zmm_de')
->label('ZMM DE'),
ExportColumn::make('zmm_dischargerange')
->label('ZMM DISCHARGE RANGE'),
ExportColumn::make('zmm_efficiency_class')
->label('ZMM EFFICIENCY CLASS'),
ExportColumn::make('zmm_framesize')
->label('ZMM FRAME SIZE'),
ExportColumn::make('zmm_impellerdiameter')
->label('ZMM IMPELLER DIAMETER'),
ExportColumn::make('zmm_insulationclass')
->label('ZMM INSULATION CLASS'),
ExportColumn::make('zmm_maxflow')
->label('ZMM MAX FLOW'),
ExportColumn::make('zmm_minhead')
->label('ZMM MIN HEAD'),
ExportColumn::make('zmm_mtrlofconst')
->label('ZMM MTR LOF CONST'),
ExportColumn::make('zmm_nde')
->label('ZMM NDE'),
ExportColumn::make('zmm_powerfactor')
->label('ZMM POWER FACTOR'),
ExportColumn::make('zmm_tagno')
->label('ZMM TAG NO'),
ExportColumn::make('zmm_year')
->label('ZMM YEAR'),
ExportColumn::make('zmm_laser_name')
->label('ZMM LASER NAME'),
ExportColumn::make('zmm_beenote')
->label('ZMM BEENOTE'),
ExportColumn::make('zmm_beenumber')
->label('ZMM BEENUMBER'),
ExportColumn::make('zmm_beestar')
->label('ZMM BEESTAR'),
ExportColumn::make('zmm_logo_ce')
->label('ZMM LOGO CE'),
ExportColumn::make('zmm_codeclass')
->label('ZMM CODECLASS'),
ExportColumn::make('zmm_colour')
->label('ZMM COLOUR'),
ExportColumn::make('zmm_logo_cp')
->label('ZMM LOGO CP'),
ExportColumn::make('zmm_grade')
->label('ZMM GRADE'),
ExportColumn::make('zmm_grwt_pset')
->label('ZMM GRWT PSET'),
ExportColumn::make('zmm_grwt_cable')
->label('ZMM GRWT CABLE'),
ExportColumn::make('zmm_grwt_motor')
->label('ZMM GRWT MOTOR'),
ExportColumn::make('zmm_grwt_pf')
->label('ZMM GRWT PF'),
ExportColumn::make('zmm_grwt_pump')
->label('ZMM GRWT PUMP'),
ExportColumn::make('zmm_isivalve')
->label('ZMM ISI VALVE'),
ExportColumn::make('zmm_isi_wc')
->label('ZMM ISI WC'),
ExportColumn::make('zmm_labelperiod')
->label('ZMM LABEL PERIOD'),
ExportColumn::make('zmm_length')
->label('ZMM LENGTH'),
ExportColumn::make('zmm_license_cml_no')
->label('ZMM LICENSE CML NO'),
ExportColumn::make('zmm_mfgmonyr')
->label('ZMM MFG MON YR'),
ExportColumn::make('zmm_modelyear')
->label('ZMM MODEL YEAR'),
ExportColumn::make('zmm_motoridentification')
->label('ZMM MOTOR IDENTIFICATION'),
ExportColumn::make('zmm_newt_pset')
->label('ZMM NEWT PSET'),
ExportColumn::make('zmm_newt_cable')
->label('ZMM NEWT CABLE'),
ExportColumn::make('zmm_newt_motor')
->label('ZMM NEWT MOTOR'),
ExportColumn::make('zmm_newt_pf')
->label('ZMM NEWT PF'),
ExportColumn::make('zmm_newt_pump')
->label('ZMM NEWT PUMP'),
ExportColumn::make('zmm_logo_nsf')
->label('ZMM LOGO NSF'),
ExportColumn::make('zmm_packtype')
->label('ZMM PACK TYPE'),
ExportColumn::make('zmm_panel')
->label('ZMM PANEL'),
ExportColumn::make('zmm_performance_factor')
->label('ZMM PERFORMANCE FACTOR'),
ExportColumn::make('zmm_pumpidentification')
->label('ZMM PUMP IDENTIFICATION'),
ExportColumn::make('zmm_psettype')
->label('ZMM PSET TYPE'),
ExportColumn::make('zmm_size')
->label('ZMM SIZE'),
ExportColumn::make('zmm_eff_ttl')
->label('ZMM EFF TTL'),
ExportColumn::make('zmm_type')
->label('ZMM TYPE'),
ExportColumn::make('zmm_usp')
->label('ZMM USP'),
ExportColumn::make('zmm_operating_range')
->label('ZMM OPERATING RANGE'),
ExportColumn::make('zmm_intake_air')
->label('ZMM INTAKE AIR'),
ExportColumn::make('zmm_oxygen_transfer_rate')
->label('ZMM OXYGEN TRANSFER RATE'),
ExportColumn::make('zmm_air_inlet_pipesize')
->label('ZMM AIR INLET PIPE SIZE'),
ExportColumn::make('zmm_sump_depth')
->label('ZMM SUMP DEPTH'),
ExportColumn::make('zmm_poles')
->label('ZMM POLES'),
ExportColumn::make('zmm_motor_heading')
->label('ZMM MOTOR HEADING'),
ExportColumn::make('zmm_motor_speed')
->label('ZMM MOTOR SPEED'),
ExportColumn::make('zqmm_qty')
->label('ZMM QTY'),
ExportColumn::make('zmm_1')
->label('ZMM 1')
->enabledByDefault(false),
ExportColumn::make('zmm_2')
->label('ZMM 2')
->enabledByDefault(false),
ExportColumn::make('zmm_3')
->label('ZMM 3')
->enabledByDefault(false),
ExportColumn::make('zmm_4')
->label('ZMM 4')
->enabledByDefault(false),
ExportColumn::make('zmm_5')
->label('ZMM 5')
->enabledByDefault(false),
ExportColumn::make('zmm_6')
->label('ZMM 6')
->enabledByDefault(false),
ExportColumn::make('zmm_7')
->label('ZMM 7')
->enabledByDefault(false),
ExportColumn::make('zmm_8')
->label('ZMM 8')
->enabledByDefault(false),
ExportColumn::make('zmm_9')
->label('ZMM 9')
->enabledByDefault(false),
ExportColumn::make('zmm_10')
->label('ZMM 10')
->enabledByDefault(false),
ExportColumn::make('zmm_11')
->label('ZMM 11')
->enabledByDefault(false),
ExportColumn::make('zmm_12')
->label('ZMM 12')
->enabledByDefault(false),
ExportColumn::make('zmm_13')
->label('ZMM 13')
->enabledByDefault(false),
ExportColumn::make('zmm_14')
->label('ZMM 14')
->enabledByDefault(false),
ExportColumn::make('zmm_15')
->label('ZMM 15')
->enabledByDefault(false),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your item characteristic export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -0,0 +1,85 @@
<?php
namespace App\Filament\Exports;
use App\Models\InvoiceValidation;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class MaterialInvoiceValidationExporter extends Exporter
{
protected static ?string $model = InvoiceValidation::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
// ExportColumn::make('id')
// ->label('ID'),
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('invoice_number')
->label('INVOICE NUMBER'),
ExportColumn::make('stickerMaster.item.code')
->label('ITEM CODE'),
ExportColumn::make('stickerMaster.item.description')
->label('ITEM DESCRIPTION'),
ExportColumn::make('stickerMaster.item.uom')
->label('UNIT OF MEASURE'),
ExportColumn::make('stickerMaster.material_type')
->label('MATERIAL TYPE')
->formatStateUsing(fn ($state) => match ($state) {
1 => 'Individual',
2 => 'Bundle',
3 => 'Quantity',
4 => 'Bundle Individual',
default => '-',
}),
ExportColumn::make('serial_number')
->label('SERIAL NUMBER'),
ExportColumn::make('batch_number')
->label('BATCH NUMBER'),
ExportColumn::make('quantity')
->label('QUANTITY'),
ExportColumn::make('load_rate')
->label('LOAD RATE'),
ExportColumn::make('upload_status')
->label('UPLOAD STATUS'),
ExportColumn::make('operator_id')
->label('OPERATOR ID'),
ExportColumn::make('created_at')
->label('CREATED AT'),
// ->dateTimeFormat('d-m-Y H:i:s'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
// ->dateTimeFormat('d-m-Y H:i:s'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
ExportColumn::make('deleted_at')
->enabledByDefault(false)
->label('DELETED AT'),
// ->dateTimeFormat('d-m-Y H:i:s'),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your material invoice validation export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';
}
return $body;
}
}

View File

@@ -0,0 +1,87 @@
<?php
namespace App\Filament\Exports;
use App\Models\PanelBoxValidation;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class PanelBoxValidationExporter extends Exporter
{
protected static ?string $model = PanelBoxValidation::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.name')
->label('PLANT NAME'),
ExportColumn::make('line.name')
->label('LINE NAME'),
ExportColumn::make('stickerMaster.item.code')
->label('ITEM CODE'),
ExportColumn::make('production_order')
->label('PRODUCTION ORDER'),
ExportColumn::make('inspection_lot_number')
->label('INSPECTION LOT NUMBER'),
ExportColumn::make('serial_number')
->label('SERIAL NUMBER'),
ExportColumn::make('panel_box_supplier')
->label('PANEL BOX SUPPLIER'),
ExportColumn::make('panel_box_serial_number')
->label('PANEL BOX SERIAL NUMBER'),
ExportColumn::make('panel_box_code')
->label('PANEL BOX CODE'),
ExportColumn::make('serial_number_panel')
->label('SERIAL NUMBER PANEL'),
ExportColumn::make('pack_slip_panel')
->label('PACK SLIP PANEL'),
ExportColumn::make('name_plate_panel')
->label('NAME PLATE PANEL'),
ExportColumn::make('tube_sticker_panel')
->label('TUBE STICKER PANEL'),
ExportColumn::make('warranty_card_panel')
->label('WARRANTY CARD PANEL'),
ExportColumn::make('part_validation1')
->label('PART VALIDATION 1'),
ExportColumn::make('part_validation2')
->label('PART VALIDATION 2'),
ExportColumn::make('part_validation3')
->label('PART VALIDATION 3'),
ExportColumn::make('part_validation4')
->label('PART VALIDATION 4'),
ExportColumn::make('part_validation5')
->label('PART VALIDATION 5'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your panel box validation export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -0,0 +1,62 @@
<?php
namespace App\Filament\Exports;
use App\Models\PanelGrMaster;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class PanelGrMasterExporter extends Exporter
{
protected static ?string $model = PanelGrMaster::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.name')
->label('PLANT NAME'),
ExportColumn::make('item.code')
->label('ITEM CODE'),
ExportColumn::make('document_number')
->label('DOCUMENT NUMBER'),
ExportColumn::make('invoice_number')
->label('INVOICE NUMBER'),
ExportColumn::make('supplier_number')
->label('SUPPLIER NUMBER'),
ExportColumn::make('inspection_lot_number')
->label('INSPECTION LOT NUMBER'),
ExportColumn::make('quantity')
->label('QUANTITY'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your panel gr master export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -39,8 +39,6 @@ class ProductionCharacteristicExporter extends Exporter
->label('OBSERVED VALUE'),
ExportColumn::make('status')
->label('STATUS'),
ExportColumn::make('inspection_status')
->label('INSPECTION STATUS'),
ExportColumn::make('remark')
->label('REMARK'),
ExportColumn::make('created_at')

View File

@@ -0,0 +1,102 @@
<?php
namespace App\Filament\Exports;
use App\Models\StickerDetail;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class StickerDetailExporter extends Exporter
{
protected static ?string $model = StickerDetail::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('stickerStructureDetail.sticker_id')
->label('STICKER ID'),
ExportColumn::make('design_element_type')
->label('DESIGN ELEMENT TYPE'),
ExportColumn::make('element_id')
->label('ELEMENT ID'),
ExportColumn::make('element_type')
->label('ELEMENT TYPE'),
ExportColumn::make('characteristics_type')
->label('CHARACTERISTICS TYPE'),
ExportColumn::make('string_value')
->label('STRING VALUE'),
ExportColumn::make('string_font')
->label('STRING FONT'),
ExportColumn::make('string_size')
->label('STRING SIZE'),
ExportColumn::make('element_colour')
->label('ELEMENT COLOUR'),
ExportColumn::make('string_align')
->label('STRING ALIGN'),
ExportColumn::make('string_x_value')
->label('STRING X VALUE'),
ExportColumn::make('string_y_value')
->label('STRING Y VALUE'),
ExportColumn::make('shape_name')
->label('SHAPE NAME'),
ExportColumn::make('shape_pen_size')
->label('SHAPE PEN SIZE'),
ExportColumn::make('curve_radius')
->label('CURVE RADIUS'),
ExportColumn::make('shape_x1_value')
->label('SHAPE X1 VALUE'),
ExportColumn::make('shape_y1_value')
->label('SHAPE Y1 VALUE'),
ExportColumn::make('shape_x2_value')
->label('SHAPE X2 VALUE'),
ExportColumn::make('shape_y2_value')
->label('SHAPE Y2 VALUE'),
ExportColumn::make('image_x')
->label('IMAGE X'),
ExportColumn::make('image_y')
->label('IMAGE Y'),
ExportColumn::make('image_width')
->label('IMAGE WIDTH'),
ExportColumn::make('image_height')
->label('IMAGE HEIGHT'),
ExportColumn::make('qr_value')
->label('QR VALUE'),
ExportColumn::make('qr_align')
->label('QR ALIGN'),
ExportColumn::make('qr_size')
->label('QR SIZE'),
ExportColumn::make('qr_x_value')
->label('QR X VALUE'),
ExportColumn::make('qr_y_value')
->label('QR Y VALUE'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your sticker detail export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -0,0 +1,148 @@
<?php
namespace App\Filament\Exports;
use App\Models\StickerMappingMaster;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class StickerMappingMasterExporter extends Exporter
{
protected static ?string $model = StickerMappingMaster::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('itemCharacteristic.item.code')
->label('ITEM CODE'),
ExportColumn::make('sticker_structure1_id')
->label('STICKER 1')
->getStateUsing(function ($record) {
return $record->sticker1Structure?->sticker_id ?? '-';
}),
ExportColumn::make('sticker1_machine_id')
->label('WC STICKER 1')
->getStateUsing(function ($record) {
return $record->sticker1Machine?->work_center ?? '-';
}),
ExportColumn::make('sticker1_print_ip')
->label('STICKER 1 PRINT IP'),
ExportColumn::make('sticker_structure2_id')
->label('STICKER 2')
->getStateUsing(function ($record) {
return $record->sticker2Structure?->sticker_id ?? '-';
}),
ExportColumn::make('sticker2_machine_id')
->label('WC STICKER 2')
->getStateUsing(function ($record) {
return $record->sticker2Machine?->work_center ?? '-';
}),
ExportColumn::make('sticker2_print_ip')
->label('STICKER 2 PRINT IP'),
ExportColumn::make('sticker_structure3_id')
->label('STICKER 3')
->getStateUsing(function ($record) {
return $record->sticker3Structure?->sticker_id ?? '-';
}),
ExportColumn::make('sticker3_machine_id')
->label('WC STICKER 3')
->getStateUsing(function ($record) {
return $record->sticker3Machine?->work_center ?? '-';
}),
ExportColumn::make('sticker3_print_ip')
->label('STICKER 3 PRINT IP'),
ExportColumn::make('sticker_structure4_id')
->label('STICKER 4')
->getStateUsing(function ($record) {
return $record->sticker4Structure?->sticker_id ?? '-';
}),
ExportColumn::make('sticker4_machine_id')
->label('WC STICKER 4')
->getStateUsing(function ($record) {
return $record->sticker4Machine?->work_center ?? '-';
}),
ExportColumn::make('sticker4_print_ip')
->label('STICKER 4 PRINT IP'),
ExportColumn::make('sticker_structure5_id')
->label('STICKER 5')
->getStateUsing(function ($record) {
return $record->sticker5Structure?->sticker_id ?? '-';
}),
ExportColumn::make('sticker5_machine_id')
->label('WC STICKER 5')
->getStateUsing(function ($record) {
return $record->sticker5Machine?->work_center ?? '-';
}),
ExportColumn::make('sticker5_print_ip')
->label('STICKER 5 PRINT IP'),
ExportColumn::make('sticker_structure6_id')
->label('STICKER 6')
->getStateUsing(function ($record) {
return $record->sticker6Structure?->sticker_id ?? '-';
}),
ExportColumn::make('sticker6_machine_id')
->label('WC STICKER 6')
->getStateUsing(function ($record) {
return $record->sticker6Machine?->work_center ?? '-';
}),
ExportColumn::make('sticker6_print_ip')
->label('STICKER 6 PRINT IP'),
ExportColumn::make('sticker_structure7_id')
->label('STICKER 7')
->getStateUsing(function ($record) {
return $record->sticker7Structure?->sticker_id ?? '-';
}),
ExportColumn::make('sticker7_machine_id')
->label('WC STICKER 7')
->getStateUsing(function ($record) {
return $record->sticker2Machine?->work_center ?? '-';
}),
ExportColumn::make('sticker7_print_ip')
->label('STICKER 7 PRINT IP'),
ExportColumn::make('sticker_structure8_id')
->label('STICKER 8')
->getStateUsing(function ($record) {
return $record->sticker8Structure?->sticker_id ?? '-';
}),
ExportColumn::make('sticker8_machine_id')
->label('WC STICKER 8')
->getStateUsing(function ($record) {
return $record->sticker8Machine?->work_center ?? '-';
}),
ExportColumn::make('sticker8_print_ip')
->label('STICKER 8 PRINT IP'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
ExportColumn::make('deleted_at')
->enabledByDefault(false)
->label('DELETED AT'),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your sticker mapping master export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -28,8 +28,10 @@ class StickerMasterExporter extends Exporter
->label('PLANT CODE'),
ExportColumn::make('item.code')
->label('ITEM CODE'),
ExportColumn::make('item.category')
->label('CATEGORY'),
ExportColumn::make('item.description')
->label('ITEM DESCRIPTION'),
->label('DESCRIPTION'),
ExportColumn::make('item.uom')
->label('UNIT OF MEASURE'),
ExportColumn::make('serial_number_motor')

View File

@@ -0,0 +1,62 @@
<?php
namespace App\Filament\Exports;
use App\Models\StickerStructureDetail;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class StickerStructureDetailExporter extends Exporter
{
protected static ?string $model = StickerStructureDetail::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('sticker_id')
->label('STICKER ID'),
ExportColumn::make('sticker_width')
->label('STICKER WIDTH'),
ExportColumn::make('sticker_height')
->label('STICKER HEIGHT'),
ExportColumn::make('sticker_lmargin')
->label('STICKER LEFT MARGIN'),
ExportColumn::make('sticker_rmargin')
->label('STICKER RIGHT MARGIN'),
ExportColumn::make('sticker_tmargin')
->label('STICKER TOP MARGIN'),
ExportColumn::make('sticker_bmargin')
->label('STICKER BOTTOM MARGIN'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your sticker structure detail export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -14,6 +14,7 @@ class TempClassCharacteristicExporter extends Exporter
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
@@ -299,6 +300,8 @@ class TempClassCharacteristicExporter extends Exporter
->label('ZQMM QTY'),
ExportColumn::make('zmm_operating_temperature')
->label('ZMM OPERATING TEMPERATURE'),
ExportColumn::make('zmm_axial_force')
->label('ZMM AXIAL FORCE'),
ExportColumn::make('winded_serial_number')
->label('WINDED SERIAL NUMBER'),
ExportColumn::make('model_type')
@@ -321,10 +324,10 @@ class TempClassCharacteristicExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your temp class characteristic export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
$body = 'Your temp class characteristic export has completed and '.number_format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';
}
return $body;

View File

@@ -29,7 +29,7 @@ class WeightValidationExporter extends Exporter
ExportColumn::make('item.code')
->label('ITEM CODE'),
ExportColumn::make('obd_number')
->label('OBD NUMBER'),
->label('OBD / GR NUMBER'),
ExportColumn::make('line_number')
->label('LINE NUMBER'),
ExportColumn::make('batch_number')
@@ -41,7 +41,7 @@ class WeightValidationExporter extends Exporter
ExportColumn::make('vehicle_number')
->label('VEHICLE NUMBER'),
ExportColumn::make('bundle_number')
->label('BUNDLE NUMBER'),
->label('BUNDLE / COIL NUMBER'),
ExportColumn::make('picked_weight')
->label('PICKED WEIGHT'),
ExportColumn::make('scanned_by')

View File

@@ -0,0 +1,68 @@
<?php
namespace App\Filament\Exports;
use App\Models\WireMasterPacking;
use Filament\Actions\Exports\ExportColumn;
use Filament\Actions\Exports\Exporter;
use Filament\Actions\Exports\Models\Export;
class WireMasterPackingExporter extends Exporter
{
protected static ?string $model = WireMasterPacking::class;
public static function getColumns(): array
{
static $rowNumber = 0;
return [
ExportColumn::make('no')
->label('NO')
->state(function ($record) use (&$rowNumber) {
// Increment and return the row number
return ++$rowNumber;
}),
ExportColumn::make('plant.code')
->label('PLANT CODE'),
ExportColumn::make('item.code')
->label('ITEM CODE'),
ExportColumn::make('customerPo.customer_po')
->label('CUSTOMER PO NUMBER'),
ExportColumn::make('wire_packing_number')
->label('WIRE PACKING NUMBER'),
ExportColumn::make('process_order')
->label('PROCESS ORDER'),
ExportColumn::make('batch_number')
->label('BATCH NUMBER'),
ExportColumn::make('weight')
->label('WEIGHT'),
ExportColumn::make('wire_packing_status')
->label('WIRE PACKING STATUS'),
ExportColumn::make('created_at')
->label('CREATED AT'),
ExportColumn::make('updated_at')
->label('UPDATED AT'),
ExportColumn::make('scanned_at')
->label('SCANNED AT'),
ExportColumn::make('created_by')
->label('CREATED BY'),
ExportColumn::make('updated_by')
->label('UPDATED BY'),
ExportColumn::make('scanned_by')
->label('SCANNED BY'),
ExportColumn::make('deleted_at')
->label('DELETED AT')
->enabledByDefault(false),
];
}
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your wire master packing export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
}
return $body;
}
}

View File

@@ -579,6 +579,10 @@ class ClassCharacteristicImporter extends Importer
->label('ZMM OPERATING TEMPERATURE')
->exampleHeader('ZMM OPERATING TEMPERATURE')
->example(''),
ImportColumn::make('zmm_axial_force')
->label('ZMM AXIAL FORCE')
->exampleHeader('ZMM AXIAL FORCE')
->example(''),
ImportColumn::make('mark_status')
->label('MARKED STATUS')
->exampleHeader('MARKED STATUS')

View File

@@ -111,6 +111,13 @@ class CustomerPoMasterImporter extends Importer
$warnMsg[] = "Customer PO '{$this->data['customer_po']}' is already mapped to customer '{$existingPo->customer_name}'.";
}
$existingPoItem = CustomerPoMaster::where('plant_id', $plant->id)->where('item_id', $item->id)->where('customer_po', $this->data['customer_po'])->where('customer_name', $this->data['customer_name'])->first();
if ($existingPoItem)
{
$warnMsg[] = "Customer PO '{$this->data['customer_po']}' is already exist with item code '{$this->data['item']}' and customer name '{$this->data['customer_name']}'.";
}
// $user = User::where('name', $this->data['created_by'])->first();
// if (! $user) {
// $warnMsg[] = 'User not found';

View File

@@ -0,0 +1,127 @@
<?php
namespace App\Filament\Imports;
use App\Models\DealerVisitPlan;
use App\Models\EmployeeMaster;
use App\Models\Plant;
use Carbon\Carbon;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Filament\Facades\Filament;
use Str;
use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use Illuminate\Support\Facades\Log;
class DealerVisitPlanImporter extends Importer
{
protected static ?string $model = DealerVisitPlan::class;
public static function getColumns(): array
{
return [
ImportColumn::make('name')
->requiredMapping()
->exampleHeader('Dealer Name')
->example('Suresh')
->label('Dealer Name')
->rules(['required']),
ImportColumn::make('company')
->requiredMapping()
->exampleHeader('Dealer Company')
->example('Suresh Traders')
->label('Dealer Company')
->rules(['required']),
ImportColumn::make('visit_plan_date')
->requiredMapping()
->exampleHeader('Visit Plan Date')
->example('2026-07-20')
->label('Visit Plan Date'),
ImportColumn::make('organizer')
->requiredMapping()
->exampleHeader('Organizer')
->example('Ramesh')
->label('Organizer'),
ImportColumn::make('employee_master_id')
->requiredMapping()
->exampleHeader('Receipient Employee Code')
->example('RAS001234')
->label('Receipient Employee Code')
->relationship(resolveUsing: 'code')
->rules(['required']),
ImportColumn::make('number_of_person')
->requiredMapping()
->exampleHeader('Number Of Person')
->example('10')
->label('Number Of Person'),
ImportColumn::make('purpose_of_visit')
->requiredMapping()
->exampleHeader('Purpose Of Visit')
->example('Meeting')
->label('Purpose Of Visit'),
ImportColumn::make('status')
->requiredMapping()
->exampleHeader('Status')
->example('Planned/Completed')
->label('Status'),
];
}
public function resolveRecord(): ?DealerVisitPlan
{
$warnMsg = [];
$user = null;
$dealerName = trim($this->data['name']);
$dealerCompany = trim($this->data['company']);
$visitPlanDt = trim($this->data['visit_plan_date']);
$organizer = trim($this->data['organizer']);
$employeeCode = trim($this->data['employee_master_id']);
$noOfPerson = trim($this->data['number_of_person']);
$purposeOfVisit = trim($this->data['purpose_of_visit']);
$status = trim($this->data['status']);
$user = Filament::auth()->user()->name;
if (Str::length($employeeCode) < 5) {
$warnMsg[] = 'Invalid receipient employee number found!';
}
if (! empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
$employeeId = EmployeeMaster::where('code', $employeeCode)->first();
$eId = $employeeId->id;
DealerVisitPlan::updateOrCreate(
[
'name' => $dealerName,
'company' => $dealerCompany,
'visit_plan_date' => Carbon::createFromFormat('d-m-Y', $visitPlanDt)->format('Y-m-d'),
'organizer' => $organizer,
'employee_master_id' => $eId,
'number_of_person' => $noOfPerson,
'purpose_of_visit' => $purposeOfVisit,
'status' => $status,
'created_by' => $user,
'updated_by' => $user,
]
);
return null;
// return new DealerVisitPlan();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your dealer visit plan import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;
}
}

View File

@@ -75,7 +75,7 @@ class ImportTransitImporter extends Importer
->label('Status'),
ImportColumn::make('insurance_status')
->exampleHeader('Insurance Status')
->example('Receipted')
->example('Yes')
->label('Insurance Status'),
ImportColumn::make('delivery_location')
->exampleHeader('Delivery Location')
@@ -176,6 +176,7 @@ class ImportTransitImporter extends Importer
return ImportTransit::updateOrCreate([
'cri_rfq_number' => $criRfqNumber,
'shipper_invoice' => $shipperInvoice,
],
[
'mail_received_date' => $this->formatDate($mailRecDate),
@@ -187,7 +188,6 @@ class ImportTransitImporter extends Importer
'requester' => $requester,
'shipper' => $shipper,
'shipper_location' => $shipperLocation,
'shipper_invoice' => $shipperInvoice,
'inv_value' => $invValue,
'freight_charge' => $freightCharge,
'custom_agent_name' => $customsAgentname,

View File

@@ -359,7 +359,7 @@ class InvoiceValidationImporter extends Importer
$curPanelBoxSerialNumber = $record->panel_box_serial_number ?? null;
}
$warnMsg[] = 'Record Item ID : '.$record->sticker_master_id.' Master Item ID : '.$stickId;
$warnMsg[] = 'Invoice Record Item ID : '.$record->sticker_master_id.' Master Item ID : '.$stickId;
if ($record->invoice_number != $invoiceNumber) {
$stickId = null;
$warnMsg[] = 'Invoice number mismatch with existing record!';

View File

@@ -0,0 +1,194 @@
<?php
namespace App\Filament\Imports;
use App\Models\ItemCharacteristic;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
class ItemCharacteristicImporter extends Importer
{
protected static ?string $model = ItemCharacteristic::class;
public static function getColumns(): array
{
return [
ImportColumn::make('plant')
->requiredMapping()
->relationship()
->rules(['required']),
ImportColumn::make('item')
->requiredMapping()
->relationship()
->rules(['required']),
ImportColumn::make('class'),
ImportColumn::make('zz1_cn_bill_ord'),
ImportColumn::make('zmm_amps'),
ImportColumn::make('zmm_brand'),
ImportColumn::make('zmm_degreeofprotection'),
ImportColumn::make('zmm_delivery'),
ImportColumn::make('zmm_dir_rot'),
ImportColumn::make('zmm_discharge'),
ImportColumn::make('zmm_discharge_max'),
ImportColumn::make('zmm_discharge_min'),
ImportColumn::make('zmm_duty'),
ImportColumn::make('zmm_eff_motor'),
ImportColumn::make('zmm_eff_pump'),
ImportColumn::make('zmm_frequency'),
ImportColumn::make('zmm_head'),
ImportColumn::make('zmm_heading'),
ImportColumn::make('zmm_head_max'),
ImportColumn::make('zmm_head_minimum'),
ImportColumn::make('zmm_idx_eff_mtr'),
ImportColumn::make('zmm_idx_eff_pump'),
ImportColumn::make('zmm_kvacode'),
ImportColumn::make('zmm_maxambtemp'),
ImportColumn::make('zmm_mincoolingflow'),
ImportColumn::make('zmm_motorseries'),
ImportColumn::make('zmm_motor_model'),
ImportColumn::make('zmm_outlet'),
ImportColumn::make('zmm_phase'),
ImportColumn::make('zmm_pressure'),
ImportColumn::make('zmm_pumpflowtype'),
ImportColumn::make('zmm_pumpseries'),
ImportColumn::make('zmm_pump_model'),
ImportColumn::make('zmm_ratedpower'),
ImportColumn::make('zmm_region'),
ImportColumn::make('zmm_servicefactor'),
ImportColumn::make('zmm_servicefactormaximumamps'),
ImportColumn::make('zmm_speed'),
ImportColumn::make('zmm_suction'),
ImportColumn::make('zmm_suctionxdelivery'),
ImportColumn::make('zmm_supplysource'),
ImportColumn::make('zmm_temperature'),
ImportColumn::make('zmm_thrustload'),
ImportColumn::make('zmm_volts'),
ImportColumn::make('zmm_wire'),
ImportColumn::make('zmm_package'),
ImportColumn::make('zmm_pvarrayrating'),
ImportColumn::make('zmm_isi'),
ImportColumn::make('zmm_isimotor'),
ImportColumn::make('zmm_isipump'),
ImportColumn::make('zmm_isipumpset'),
ImportColumn::make('zmm_pumpset_model'),
ImportColumn::make('zmm_stages'),
ImportColumn::make('zmm_headrange'),
ImportColumn::make('zmm_overall_efficiency'),
ImportColumn::make('zmm_connection'),
ImportColumn::make('zmm_min_bore_size'),
ImportColumn::make('zmm_isireference'),
ImportColumn::make('zmm_category'),
ImportColumn::make('zmm_submergence'),
ImportColumn::make('zmm_capacitorstart'),
ImportColumn::make('zmm_capacitorrun'),
ImportColumn::make('zmm_inch'),
ImportColumn::make('zmm_motor_type'),
ImportColumn::make('zmm_dismantle_direction'),
ImportColumn::make('zmm_eff_ovrall'),
ImportColumn::make('zmm_bodymoc'),
ImportColumn::make('zmm_rotormoc'),
ImportColumn::make('zmm_dlwl'),
ImportColumn::make('zmm_inputpower'),
ImportColumn::make('zmm_imp_od'),
ImportColumn::make('zmm_ambtemp'),
ImportColumn::make('zmm_de'),
ImportColumn::make('zmm_dischargerange'),
ImportColumn::make('zmm_efficiency_class'),
ImportColumn::make('zmm_framesize'),
ImportColumn::make('zmm_impellerdiameter'),
ImportColumn::make('zmm_insulationclass'),
ImportColumn::make('zmm_maxflow'),
ImportColumn::make('zmm_minhead'),
ImportColumn::make('zmm_mtrlofconst'),
ImportColumn::make('zmm_nde'),
ImportColumn::make('zmm_powerfactor'),
ImportColumn::make('zmm_tagno'),
ImportColumn::make('zmm_year'),
ImportColumn::make('zmm_laser_name'),
ImportColumn::make('zmm_beenote'),
ImportColumn::make('zmm_beenumber'),
ImportColumn::make('zmm_beestar'),
ImportColumn::make('zmm_logo_ce'),
ImportColumn::make('zmm_codeclass'),
ImportColumn::make('zmm_colour'),
ImportColumn::make('zmm_logo_cp'),
ImportColumn::make('zmm_grade'),
ImportColumn::make('zmm_grwt_pset'),
ImportColumn::make('zmm_grwt_cable'),
ImportColumn::make('zmm_grwt_motor'),
ImportColumn::make('zmm_grwt_pf'),
ImportColumn::make('zmm_grwt_pump'),
ImportColumn::make('zmm_isivalve'),
ImportColumn::make('zmm_isi_wc'),
ImportColumn::make('zmm_labelperiod'),
ImportColumn::make('zmm_length'),
ImportColumn::make('zmm_license_cml_no'),
ImportColumn::make('zmm_mfgmonyr'),
ImportColumn::make('zmm_modelyear'),
ImportColumn::make('zmm_motoridentification'),
ImportColumn::make('zmm_newt_pset'),
ImportColumn::make('zmm_newt_cable'),
ImportColumn::make('zmm_newt_motor'),
ImportColumn::make('zmm_newt_pf'),
ImportColumn::make('zmm_newt_pump'),
ImportColumn::make('zmm_logo_nsf'),
ImportColumn::make('zmm_packtype'),
ImportColumn::make('zmm_panel'),
ImportColumn::make('zmm_performance_factor'),
ImportColumn::make('zmm_pumpidentification'),
ImportColumn::make('zmm_psettype'),
ImportColumn::make('zmm_size'),
ImportColumn::make('zmm_eff_ttl'),
ImportColumn::make('zmm_type'),
ImportColumn::make('zmm_usp'),
ImportColumn::make('zmm_operating_range'),
ImportColumn::make('zmm_intake_air'),
ImportColumn::make('zmm_oxygen_transfer_rate'),
ImportColumn::make('zmm_air_inlet_pipesize'),
ImportColumn::make('zmm_sump_depth'),
ImportColumn::make('zmm_poles'),
ImportColumn::make('zmm_motor_heading'),
ImportColumn::make('zmm_motor_speed'),
ImportColumn::make('zqmm_qty'),
ImportColumn::make('zmm_1'),
ImportColumn::make('zmm_2'),
ImportColumn::make('zmm_3'),
ImportColumn::make('zmm_4'),
ImportColumn::make('zmm_5'),
ImportColumn::make('zmm_6'),
ImportColumn::make('zmm_7'),
ImportColumn::make('zmm_8'),
ImportColumn::make('zmm_9'),
ImportColumn::make('zmm_10'),
ImportColumn::make('zmm_11'),
ImportColumn::make('zmm_12'),
ImportColumn::make('zmm_13'),
ImportColumn::make('zmm_14'),
ImportColumn::make('zmm_15'),
ImportColumn::make('created_by'),
ImportColumn::make('updated_by'),
];
}
public function resolveRecord(): ?ItemCharacteristic
{
// return ItemCharacteristic::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
// 'email' => $this->data['email'],
// ]);
return new ItemCharacteristic();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your item characteristic import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;
}
}

View File

@@ -0,0 +1,70 @@
<?php
namespace App\Filament\Imports;
use App\Models\PanelBoxValidation;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
class PanelBoxValidationImporter extends Importer
{
protected static ?string $model = PanelBoxValidation::class;
public static function getColumns(): array
{
return [
ImportColumn::make('plant')
->requiredMapping()
->relationship()
->rules(['required']),
ImportColumn::make('line')
->requiredMapping()
->relationship()
->rules(['required']),
ImportColumn::make('stickerMaster')
->requiredMapping()
->relationship()
->rules(['required']),
ImportColumn::make('production_order'),
ImportColumn::make('serial_number'),
ImportColumn::make('serial_number_panel'),
ImportColumn::make('pack_slip_panel'),
ImportColumn::make('name_plate_panel'),
ImportColumn::make('tube_sticker_panel'),
ImportColumn::make('warranty_card_panel'),
ImportColumn::make('part_validation1'),
ImportColumn::make('part_validation2'),
ImportColumn::make('part_validation3'),
ImportColumn::make('part_validation4'),
ImportColumn::make('part_validation5'),
ImportColumn::make('created_by'),
ImportColumn::make('updated_by'),
ImportColumn::make('panel_box_supplier'),
ImportColumn::make('panel_box_serial_number'),
ImportColumn::make('panel_box_code'),
ImportColumn::make('inspection_lot_number'),
];
}
public function resolveRecord(): ?PanelBoxValidation
{
// return PanelBoxValidation::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
// 'email' => $this->data['email'],
// ]);
return new PanelBoxValidation();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your panel box validation import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;
}
}

View File

@@ -0,0 +1,160 @@
<?php
namespace App\Filament\Imports;
use App\Models\Item;
use App\Models\PanelGrMaster;
use App\Models\Plant;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Filament\Facades\Filament;
use Str;
use Filament\Actions\Imports\Exceptions\RowImportFailedException;
class PanelGrMasterImporter extends Importer
{
protected static ?string $model = PanelGrMaster::class;
public static function getColumns(): array
{
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('Plant Code')
->example('1000')
->label('Plant Code')
->relationship(resolveUsing: 'code')
->rules(['required']),
ImportColumn::make('item')
->requiredMapping()
->exampleHeader('Item Code')
->example('630214')
->label('Item Code')
->relationship(resolveUsing: 'code')
->rules(['required']),
ImportColumn::make('document_number')
->requiredMapping()
->exampleHeader('Document Number')
->example('11023567')
->label('Document Number')
->rules(['required']),
ImportColumn::make('invoice_number')
->requiredMapping()
->exampleHeader('Invoice Number')
->example('3RAW0012345')
->label('Invoice Number')
->rules(['required']),
ImportColumn::make('supplier_number')
->requiredMapping()
->exampleHeader('Supplier Number')
->example('154564564')
->label('Supplier Number')
->rules(['required']),
ImportColumn::make('inspection_lot_number')
->requiredMapping()
->exampleHeader('Inspection Lot Number')
->example('154564564')
->label('Inspection Lot Number')
->rules(['required']),
ImportColumn::make('quantity')
->requiredMapping()
->exampleHeader('Quantity')
->example('10')
->label('Quantity')
->rules(['required']),
];
}
public function resolveRecord(): ?PanelGrMaster
{
$warnMsg = [];
$plantCod = $this->data['plant'];
$plant = null;
$item = null;
$userName = Filament::auth()->user()?->name;
if (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) {
$warnMsg[] = 'Invalid plant code found';
} else {
$plant = Plant::where('code', $plantCod)->first();
if (! $plant) {
$warnMsg[] = 'Plant not found';
} else {
$item = Item::where('code', $this->data['item'])->where('plant_id', $plant->id)->first();
}
if (! $item) {
$warnMsg[] = 'Item not found';
}
}
if (empty($this->data['document_number'])) {
$warnMsg[] = 'Document Number cannot be empty.';
}
// if (Str::length($this->data['invoice_number']) < 7 || ! ctype_alnum($this->data['invoice_number'])) {
// $warnMsg[] = 'Invalid invoice number found';
// }
if (empty($this->data['supplier_number'])) {
$warnMsg[] = 'Supplier Number cannot be empty.';
}
if (empty($this->data['inspection_lot_number'])) {
$warnMsg[] = 'Inspection Lot Number cannot be empty.';
}
if (!is_numeric($this->data['inspection_lot_number'])) {
$warnMsg[] = 'Inspection Lot Number must be a valid number.';
}
if (empty($this->data['quantity'])) {
$warnMsg[] = 'Quantity cannot be empty.';
}
elseif (!is_numeric($this->data['quantity'])) {
$warnMsg[] = 'Quantity must be a valid number.';
} elseif ((float) $this->data['quantity'] <= 0) {
$warnMsg[] = 'Quantity must be greater than 0.';
}
$existingRecord = PanelGrMaster::where('document_number', $this->data['document_number'])->where('plant_id', $this->data['plant'])->first();
if ($existingRecord && $existingRecord->invoice_number != $this->data['invoice_number'])
{
$warnMsg[] = "Document Number '{$this->data['document_number']}' is already associated with Invoice Number '{$existingRecord->invoice_number}'.";
}
if (! empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
PanelGrMaster::updateOrCreate(
[
'plant_id' => $plant->id,
'item_id' => $item->id,
'document_number' => $this->data['document_number'],
'invoice_number' => $this->data['invoice_number'],
'supplier_number' => $this->data['supplier_number'] ?? null,
'inspection_lot_number' => $this->data['inspection_lot_number'] ?? null,
],
[
'quantity' => $this->data['quantity'] ?? null,
'updated_by' => $userName,
'created_by' => $userName, // Only used when creating
]
);
return null;
// return new PanelGrMaster();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your panel gr master import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;
}
}

View File

@@ -0,0 +1,308 @@
<?php
namespace App\Filament\Imports;
use App\Models\InvoiceValidation;
use App\Models\Item;
use App\Models\Plant;
use App\Models\StickerMaster;
use Carbon\Carbon;
use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Filament\Facades\Filament;
use Str;
class SapInvoiceValidationImporter extends Importer
{
protected static ?string $model = InvoiceValidation::class;
public static function getColumns(): array
{
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('PLANT CODE')
->example('2040')
->label('PLANT CODE')
->relationship(resolveUsing: 'code')
->rules(['required']),
ImportColumn::make('invoice_number')
->requiredMapping()
->exampleHeader('INVOICE NUMBER')
->example('INV000001')
->label('INVOICE NUMBER')
->rules(['required']),
ImportColumn::make('item_reference') // stickerMaster
->requiredMapping()
->exampleHeader('ITEM CODE')
->example('123456')
->label('ITEM CODE')
// ->relationship() // resolveUsing: 'items.code'
->rules(['required']),
ImportColumn::make('serial_number')
->requiredMapping()
->exampleHeader('SERIAL NUMBER')
->example('12345678901234')
->label('SERIAL NUMBER'),
ImportColumn::make('scanned_status_set')
->requiredMapping()
->exampleHeader('PUMPSET SCANNED STATUS')
->example('1')
->label('PUMPSET SCANNED STATUS'),
ImportColumn::make('created_at')
->requiredMapping()
->exampleHeader('CREATED AT')
->example('19-06-2026 15:00:00')
->label('CREATED AT')
->rules(['required']),
ImportColumn::make('operator_id')
->requiredMapping()
->exampleHeader('OPERATOR ID')
->example('USER00001')
->label('OPERATOR ID')
->rules(['required']),
];
}
public function resolveRecord(): ?InvoiceValidation
{
// return InvoiceValidation::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
// 'email' => $this->data['email'],
// ]);
$warnMsg = [];
$plantId = null;
$stickId = null;
$plantCod = $this->data['plant'];
$invoiceNumber = strtoupper(trim($this->data['invoice_number'])) ?? null;
$iCode = strtoupper(trim($this->data['item_reference'])) ?? null;
$serialNumber = trim($this->data['serial_number']) ?? null;
$curPumpSetQr = trim($this->data['scanned_status_set']) ?? null;
$curScanStatus = null;
$loadRate = 0;
$operatorId = trim($this->data['operator_id']);
$createdAt = $this->data['created_at'];
$createdBy = Filament::auth()->user()?->name;
$updatedBy = $createdBy;
$packCnt = 0;
$scanCnt = 0;
$hasPumpSetQr = null;
$hadPumpSetQr = null;
if ($plantCod == null || $plantCod == '') {
$warnMsg[] = "Plant code can't be empty!";
} elseif ($invoiceNumber == null || $invoiceNumber == '') {
$warnMsg[] = "Invoice number can't be empty!";
} elseif ($iCode == null || $iCode == '') {
$warnMsg[] = "Item code can't be empty!";
} elseif ($serialNumber == null || $serialNumber == '') {
$warnMsg[] = "Serial number can't be empty!";
} elseif ($curPumpSetQr != null && $curPumpSetQr != '' && $curPumpSetQr != '1' && $curPumpSetQr != 1) {
$warnMsg[] = 'PumpSet scanned status is invalid!';
} elseif ($operatorId == null || $operatorId == '') {
$warnMsg[] = "Operator ID can't be empty!";
} elseif ($createdAt == null || $createdAt == '') {
$warnMsg[] = "Created at timestamp can't be empty!";
}
if (Str::length($plantCod) > 0) {
if (Str::length($plantCod) < 4 || ! is_numeric($plantCod) || ! preg_match('/^[1-9]\d{3,}$/', $plantCod)) {
$warnMsg[] = 'Invalid plant code found!';
} elseif ($plantCod == '2040') { // 2040
$plant = Plant::where('code', $plantCod)->first();
if (! $plant) {
$warnMsg[] = 'Plant code not found!';
} else {
$plantId = $plant->id;
}
} else {
$warnMsg[] = "Unknown plant code '$plantCod' found!";
}
}
if (Str::length($invoiceNumber) > 0 && ! ctype_alnum($invoiceNumber)) {
$warnMsg[] = "Invalid invoice number '$invoiceNumber' found!";
} elseif (Str::length($iCode) > 0 && (Str::length($iCode) < 6 || ! ctype_alnum($iCode))) {
$warnMsg[] = "Invalid item code '$iCode' found!";
} elseif ($plantId) {
$itemCode = Item::where('code', $iCode)->first();
if (! $itemCode) {
$warnMsg[] = 'Item code not found in item master!';
} else {
$itemCode = Item::where('code', $iCode)->where('plant_id', $plantId)->first();
if (! $itemCode) {
$warnMsg[] = 'Item code not found in item master for the given plant!';
} else {
$itemId = $itemCode->id;
$itemCode = StickerMaster::where('item_id', $itemId)->first();
if (! $itemCode) {
$warnMsg[] = 'Item code not found in sticker master!';
} else {
if ($plantId) {
$itemCode = StickerMaster::where('item_id', $itemId)->where('plant_id', $plantId)->first();
if (! $itemCode) {
$warnMsg[] = 'Item code not found in sticker master for the given plant!';
} elseif ($itemCode->material_type != '' && $itemCode->material_type != null) {
$stickId = null;
$warnMsg[] = 'Material invoice item code found!';
} else {
$stickId = $itemCode->id;
$loadRate = $itemCode->load_rate ?? 0;
$invalidPackage = false;
$hasMotorQr = $itemCode->tube_sticker_motor ?? null;
$hasPumpQr = $itemCode->tube_sticker_pump ?? null;
$hasPumpSetQr = $itemCode->tube_sticker_pumpset ?? null;
$hasCapacitorQr = $itemCode->panel_box_code ?? null;
if (! $hasMotorQr && ! $hasPumpQr && ! $hasPumpSetQr) {// && ! $hasCapacitorQr
$hasMotorQr = $itemCode->pack_slip_motor ?? null;
$hasPumpQr = $itemCode->pack_slip_pump ?? null;
$hasPumpSetQr = $itemCode->pack_slip_pumpset ?? null;
} else {
if (! $hasPumpSetQr && ! $hasPumpQr) {
$hasPumpQr = $itemCode->pack_slip_pump ?? null;
}
$hasTubeMotorQr = $itemCode->tube_sticker_motor ?? null;
$hasPackMotorQr = $itemCode->pack_slip_motor ?? null;
$hasTubePumpSetQr = $itemCode->tube_sticker_pumpset ?? null;
$hasPackPumpSetQr = $itemCode->pack_slip_pumpset ?? null;
if ($hasTubeMotorQr != $hasPackMotorQr || $hasTubePumpSetQr != $hasPackPumpSetQr) {
$invalidPackage = true;
}
}
if ($hasMotorQr || $hasPumpQr || ! $hasPumpSetQr || $hasCapacitorQr || $invalidPackage) {
$stickId = null;
$warnMsg[] = "Item code doesn't have valid package type to proceed!";
} else {
$packCnt++;
}
}
}
}
}
}
}
if ($stickId) {
$record = InvoiceValidation::where('serial_number', $serialNumber)->where('plant_id', $plantId)->first();
if ($record) {
if ($record->sticker_master_id != $stickId) {
$stickId = null;
$warnMsg[] = 'Item code mismatch with existing record!';
} else {
$record = InvoiceValidation::where('serial_number', $serialNumber)->where('plant_id', $plantId)
->whereHas('stickerMasterRelation.item', function ($query) use ($plantId, $iCode) {
$query->where('plant_id', $plantId)->where('code', $iCode);
})
->first();
if ($record) {
$hadPumpSetQr = $record->scanned_status_set ?? null;
if ($hadPumpSetQr && $hasPumpSetQr) {
$curPumpSetQr = $hadPumpSetQr;
}
$warnMsg[] = 'Invoice Record Item ID : '.$record->sticker_master_id.' Master Item ID : '.$stickId;
if ($record->invoice_number != $invoiceNumber) {
$stickId = null;
$warnMsg[] = 'Invoice number mismatch with existing record!';
} elseif ($record->scanned_status == 'Scanned') {
$stickId = null;
return null;
} else {
if ($hasPumpSetQr) {
$scanCnt = $curPumpSetQr ? $scanCnt + 1 : $scanCnt;
$record->scanned_status_set = $curPumpSetQr;
if ($packCnt == $scanCnt) {
$record->scanned_status = 'Scanned';
}
$record->upload_status = 'Y';
$record->updated_by = $updatedBy;
$record->save();
return null;
}
}
}
}
}
}
if ($stickId) {
$formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; // '07-05-2025 08:00' or '07-05-2025 08:00:00'
$cDateTime = null;
foreach ($formats as $format) {
try {
$cDateTime = Carbon::createFromFormat($format, $createdAt);
break;
} catch (\Exception $e) {
// $warnMsg[] = "Date format mismatch with format: $format";
}
}
if (! isset($cDateTime)) {
$warnMsg[] = "Invalid 'Created DateTime' format. Expected DD-MM-YYYY HH:MM:SS";
}
}
if (! empty($warnMsg)) {
throw new RowImportFailedException(implode(', ', $warnMsg));
}
if ($stickId) {
if ($hasPumpSetQr) {
$scanCnt = $curPumpSetQr ? $scanCnt + 1 : $scanCnt;
if ($packCnt == $scanCnt) {
$curScanStatus = 'Scanned';
} else {
$curScanStatus = null;
}
}
// $curScanStatus
InvoiceValidation::updateOrCreate([
'plant_id' => $plantId,
'sticker_master_id' => $stickId,
'serial_number' => $serialNumber,
],
[
'invoice_number' => $invoiceNumber,
'scanned_status_set' => $curPumpSetQr,
'scanned_status' => $curScanStatus,
'load_rate' => $loadRate,
'upload_status' => 'Y',
'operator_id' => $operatorId,
'created_by' => $createdBy,
'created_at' => $cDateTime->format('Y-m-d H:i:s'),
'updated_by' => $updatedBy,
]);
}
return null;
// return new InvoiceValidation;
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your sap invoice validation import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to import.';
}
return $body;
}
}

View File

@@ -0,0 +1,325 @@
<?php
namespace App\Filament\Imports;
use App\Models\Plant;
use App\Models\StickerDetail;
use App\Models\StickerStructureDetail;
use App\Models\User;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
use Filament\Actions\Imports\Exceptions\RowImportFailedException;
use Filament\Facades\Filament;
class StickerDetailImporter extends Importer
{
protected static ?string $model = StickerDetail::class;
public static function getColumns(): array
{
return [
ImportColumn::make('sticker_structure_detail_id')
->requiredMapping()
->exampleHeader('Sticker ID')
->example('123456')
->label('STICKER ID')
->rules(['required']),
ImportColumn::make('design_element_type')
->requiredMapping()
->exampleHeader('Design Element Type')
->label('DESIGN ELEMENT TYPE')
->example('Text/Shape/Image/QR'),
ImportColumn::make('element_id')
->requiredMapping()
->exampleHeader('Element ID')
->label('ELEMENT ID')
->example('001'),
ImportColumn::make('element_type')
->requiredMapping()
->exampleHeader('Element Type')
->label('ELEMENT TYPE')
->example('Static/Dynamic'),
ImportColumn::make('characteristics_type')
->requiredMapping()
->exampleHeader('Characteristics Type')
->label('CHARACTERISTICS TYPE')
->example('zmm_heading'),
ImportColumn::make('string_value')
->requiredMapping()
->exampleHeader('String Value')
->label('STRING VALUE')
->example('1'),
ImportColumn::make('string_font')
->requiredMapping()
->exampleHeader('String Font')
->label('STRING FONT')
->example('Arial'),
ImportColumn::make('string_size')
->requiredMapping()
->exampleHeader('String Size')
->label('STRING SIZE')
->example('12'),
ImportColumn::make('element_colour')
->requiredMapping()
->exampleHeader('Element Colour')
->label('ELEMENT COLOUR')
->example('Black'),
ImportColumn::make('string_align')
->requiredMapping()
->exampleHeader('String Align')
->label('STRING ALIGN')
->example('Left/Center/Right'),
ImportColumn::make('string_x_value')
->requiredMapping()
->exampleHeader('String X Value')
->label('STRING X VALUE')
->example('10'),
ImportColumn::make('string_y_value')
->requiredMapping()
->exampleHeader('String Y Value')
->label('STRING Y VALUE')
->example('20'),
ImportColumn::make('shape_name')
->requiredMapping()
->exampleHeader('Shape Name')
->label('SHAPE NAME')
->example('Line/Rectangle/CurvedRectangle'),
ImportColumn::make('shape_pen_size')
->requiredMapping()
->exampleHeader('Shape Pen Size')
->label('SHAPE PEN SIZE')
->example('0.3'),
ImportColumn::make('curve_radius')
->requiredMapping()
->exampleHeader('Curve Radius')
->label('CURVE RADIUS')
->example('3'),
ImportColumn::make('shape_x1_value')
->requiredMapping()
->exampleHeader('Shape X1 Value')
->label('SHAPE X1 VALUE')
->example('10'),
ImportColumn::make('shape_y1_value')
->requiredMapping()
->exampleHeader('Shape Y1 Value')
->label('SHAPE Y1 VALUE')
->example('20'),
ImportColumn::make('shape_x2_value')
->requiredMapping()
->exampleHeader('Shape X2 Value')
->label('SHAPE X2 VALUE')
->example('30'),
ImportColumn::make('shape_y2_value')
->requiredMapping()
->exampleHeader('Shape Y2 Value')
->label('SHAPE Y2 VALUE')
->example('40'),
ImportColumn::make('image_x')
->requiredMapping()
->exampleHeader('Image X')
->label('IMAGE X')
->example('15'),
ImportColumn::make('image_y')
->requiredMapping()
->exampleHeader('Image Y')
->label('IMAGE Y')
->example('25'),
ImportColumn::make('image_width')
->requiredMapping()
->exampleHeader('Image Width')
->label('IMAGE WIDTH')
->example('100'),
ImportColumn::make('image_height')
->requiredMapping()
->exampleHeader('Image Height')
->label('IMAGE HEIGHT')
->example('100'),
ImportColumn::make('qr_value')
->requiredMapping()
->exampleHeader('QR Value')
->label('QR VALUE')
->example('246118|53246735267'),
ImportColumn::make('qr_align')
->requiredMapping()
->exampleHeader('QR Align')
->label('QR ALIGN')
->example('Left/Center/Right'),
ImportColumn::make('qr_size')
->requiredMapping()
->exampleHeader('QR Size')
->label('QR SIZE')
->example('10'),
ImportColumn::make('qr_x_value')
->requiredMapping()
->exampleHeader('QR X Value')
->label('QR X VALUE')
->example('30'),
ImportColumn::make('qr_y_value')
->requiredMapping()
->exampleHeader('QR Y Value')
->label('QR Y VALUE')
->example('40'),
// ImportColumn::make('created_by')
// ->requiredMapping()
// ->exampleHeader('Created By')
// ->label('CREATED BY')
// ->example('RAW001234'),
];
}
public function resolveRecord(): ?StickerDetail
{
$warnMsg = [];
$createdBy = Filament::auth()->user()->name;
$updatedBy = Filament::auth()->user()->name;
$sticker = $this->data['sticker_structure_detail_id'] ?? null;
$stickerCode = StickerStructureDetail::where('sticker_id', $sticker)->first();
if (!$stickerCode) {
$warnMsg[] = "Sticker Id not found in Sticker Structure Detail";
}else{
$stickerId = $stickerCode->id;
}
if (!$stickerId || $stickerId == null || $stickerId == '') {
$warnMsg[] = "Sticker Id not found in Sticker Structure Detail";
}
$designType = strtolower($this->data['design_element_type'] ?? '');
$rules = [
'text' => [
'required' => ['string_x_value', 'string_y_value'],
'allowed' => [
'string_value',
'string_font',
'string_size',
'string_align',
'string_colour',
'string_x_value',
'string_y_value',
],
],
'image' => [
'required' => ['image_x', 'image_y', 'image_width', 'image_height'],
'allowed' => [
'image_x',
'image_y',
'image_width',
'image_height',
],
],
'shape' => [
'required' => ['shape_name', 'shape_pen_size', 'shape_x1_value', 'shape_y1_value', 'shape_x2_value', 'shape_y2_value'],
'allowed' => [
'shape_name',
'shape_pen_size',
'curve_radius',
'shape_x1_value',
'shape_y1_value',
'shape_x2_value',
'shape_y2_value',
],
],
'qr' => [
'required' => ['qr_x_value', 'qr_y_value', 'qr_size'],
'allowed' => [
'qr_value',
'qr_align',
'qr_size',
'qr_x_value',
'qr_y_value',
],
],
];
if (!isset($rules[$designType])) {
$warnMsg[] = "Invalid Design Element Type: {$designType}";
}
if (isset($rules[$designType])) {
foreach ($rules[$designType]['required'] as $field) {
if (empty($this->data[$field])) {
$warnMsg[] = ucfirst($designType) . " requires {$field}";
}
}
}
$allElementFields = [
'string_value','string_font','string_size','string_align','string_colour',
'string_x_value','string_y_value',
'image_x','image_y','image_width','image_height',
'shape_name','shape_pen_size','curve_radius',
'shape_x1_value','shape_y1_value','shape_x2_value','shape_y2_value',
'qr_value','qr_align','qr_size','qr_x_value','qr_y_value',
];
if (isset($rules[$designType])) {
$allowed = $rules[$designType]['allowed'];
foreach ($allElementFields as $field) {
if (!in_array($field, $allowed, true) && !empty($this->data[$field])) {
$warnMsg[] = "Field {$field} is not allowed for {$designType} element";
}
}
}
if (!empty($warnMsg)) {
throw new RowImportFailedException(implode(' | ', $warnMsg));
}
StickerDetail::Create([
'sticker_structure_detail_id' => $stickerId,
'design_element_type' => $this->data['design_element_type'],
'element_id' => $this->data['element_id'],
'element_type' => $this->data['element_type'],
'characteristics_type' => $this->data['characteristics_type'],
'string_value' => $this->data['string_value'],
'string_font' => $this->data['string_font'],
'string_size' => $this->data['string_size'],
'element_colour' => $this->data['element_colour'],
'string_align' => $this->data['string_align'],
'string_x_value' => $this->data['string_x_value'],
'string_y_value' => $this->data['string_y_value'],
'shape_name' => $this->data['shape_name'],
'shape_pen_size' => $this->data['shape_pen_size'],
'curve_radius' => $this->data['curve_radius'],
'shape_x1_value' => $this->data['shape_x1_value'],
'shape_y1_value' => $this->data['shape_y1_value'],
'shape_x2_value' => $this->data['shape_x2_value'],
'shape_y2_value' => $this->data['shape_y2_value'],
'image_x' => $this->data['image_x'],
'image_y' => $this->data['image_y'],
'image_width' => $this->data['image_width'],
'image_height' => $this->data['image_height'],
'qr_value' => $this->data['qr_value'],
'qr_align' => $this->data['qr_align'],
'qr_size' => $this->data['qr_size'],
'qr_x_value' => $this->data['qr_x_value'],
'qr_y_value' => $this->data['qr_y_value'],
'created_by' => $createdBy,
'updated_by' => $updatedBy,
]);
return null;
//return new StickerDetail();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your sticker detail import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;
}
}

View File

@@ -0,0 +1,55 @@
<?php
namespace App\Filament\Imports;
use App\Models\StickerMappingMaster;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
class StickerMappingMasterImporter extends Importer
{
protected static ?string $model = StickerMappingMaster::class;
public static function getColumns(): array
{
return [
ImportColumn::make('plant_id')
->requiredMapping()
->numeric()
->rules(['required', 'integer']),
ImportColumn::make('item')
->requiredMapping()
->relationship()
->rules(['required']),
ImportColumn::make('sticker1'),
ImportColumn::make('sticker2'),
ImportColumn::make('sticker3'),
ImportColumn::make('sticker4'),
ImportColumn::make('sticker5'),
ImportColumn::make('created_by'),
ImportColumn::make('updated_by'),
];
}
public function resolveRecord(): ?StickerMappingMaster
{
// return StickerMappingMaster::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
// 'email' => $this->data['email'],
// ]);
return new StickerMappingMaster();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your sticker mapping master import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;
}
}

View File

@@ -0,0 +1,49 @@
<?php
namespace App\Filament\Imports;
use App\Models\StickerStructureDetail;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
class StickerStructureDetailImporter extends Importer
{
protected static ?string $model = StickerStructureDetail::class;
public static function getColumns(): array
{
return [
ImportColumn::make('sticker_id'),
ImportColumn::make('sticker_width'),
ImportColumn::make('sticker_height'),
ImportColumn::make('sticker_lmargin'),
ImportColumn::make('sticker_rmargin'),
ImportColumn::make('sticker_tmargin'),
ImportColumn::make('sticker_bmargin'),
ImportColumn::make('created_by'),
ImportColumn::make('updated_by'),
];
}
public function resolveRecord(): ?StickerStructureDetail
{
// return StickerStructureDetail::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
// 'email' => $this->data['email'],
// ]);
return new StickerStructureDetail();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your sticker structure detail import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;
}
}

View File

@@ -579,6 +579,10 @@ class TempClassCharacteristicImporter extends Importer
->label('ZMM OPERATING TEMPERATURE')
->exampleHeader('ZMM OPERATING TEMPERATURE')
->example(''),
ImportColumn::make('zmm_axial_force')
->label('ZMM AXIAL FORCE')
->exampleHeader('ZMM AXIAL FORCE')
->example(''),
ImportColumn::make('winded_serial_number')
->label('WINDed SERIAL NUMBER')
->exampleHeader('WINDED SERIAL NUMBER')
@@ -605,15 +609,15 @@ class TempClassCharacteristicImporter extends Importer
// 'email' => $this->data['email'],
// ]);
return new TempClassCharacteristic();
return new TempClassCharacteristic;
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your temp class characteristic import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.';
$body = 'Your temp class characteristic import has completed and '.number_format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
$body .= ' '.number_format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to import.';
}
return $body;

View File

@@ -0,0 +1,96 @@
<?php
namespace App\Filament\Imports;
use App\Models\WireMasterPacking;
use Filament\Actions\Imports\ImportColumn;
use Filament\Actions\Imports\Importer;
use Filament\Actions\Imports\Models\Import;
class WireMasterPackingImporter extends Importer
{
protected static ?string $model = WireMasterPacking::class;
public static function getColumns(): array
{
return [
ImportColumn::make('plant')
->requiredMapping()
->exampleHeader('PLANT CODE')
->example('1000')
->label('PLANT CODE')
->relationship(resolveUsing: 'code')
->rules(['required']),
ImportColumn::make('item')
->requiredMapping()
->exampleHeader('ITEM CODE')
->example('630214')
->label('ITEM CODE')
->relationship(resolveUsing: 'code')
->rules(['required']),
ImportColumn::make('customer_po_master_id')
->requiredMapping()
->exampleHeader('CUSTOMER PO NUMBER')
->example('PO12345')
->label('CUSTOMER PO NUMBER')
->numeric()
->rules(['required', 'integer']),
ImportColumn::make('wire_packing_number')
->exampleHeader('WIRE PACKING NUMBER')
->example('WP001')
->label('WIRE PACKING NUMBER'),
ImportColumn::make('process_order')
->exampleHeader('PROCESS ORDER')
->example('PO001')
->label('PROCESS ORDER'),
ImportColumn::make('batch_number')
->exampleHeader('BATCH NUMBER')
->example('BN001')
->label('BATCH NUMBER'),
ImportColumn::make('weight')
->exampleHeader('WEIGHT')
->example('100.5')
->label('WEIGHT'),
ImportColumn::make('wire_packing_status')
->exampleHeader('WIRE PACKING STATUS')
->example('Active')
->label('WIRE PACKING STATUS'),
ImportColumn::make('scanned_at')
->requiredMapping()
->rules(['required', 'datetime']),
ImportColumn::make('created_by')
->exampleHeader('CREATED BY')
->example('John Doe')
->label('CREATED BY'),
ImportColumn::make('updated_by')
->exampleHeader('UPDATED BY')
->example('Jane Smith')
->label('UPDATED BY'),
ImportColumn::make('scanned_by')
->exampleHeader('SCANNED BY')
->example('John Doe')
->label('SCANNED BY'),
];
}
public function resolveRecord(): ?WireMasterPacking
{
// return WireMasterPacking::firstOrNew([
// // Update existing records, matching them by `$this->data['column_name']`
// 'email' => $this->data['email'],
// ]);
return new WireMasterPacking();
}
public static function getCompletedNotificationBody(Import $import): string
{
$body = 'Your wire master packing import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.';
if ($failedRowsCount = $import->getFailedRowsCount()) {
$body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.';
}
return $body;
}
}

View File

@@ -128,7 +128,8 @@ class CycleCount extends Page
$operatorName = $user->name;
$pattern1 = '/^[^#]*#[^#]*#[^#]*#[^#]*#$/';
$pattern2 = '/^[^|]*\|[^|]*\|[^|]*$/';
// $pattern2 = '/^[^|]*\|[^|]*\|[^|]*$/';
$pattern2 = '/^[^|]+\|[^|]+(?:\|[^|]*)?$/';
$pattern3 = '/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPp])?\|?$/';
// $pattern2 = '/^[^|]+\|[^|]+\|[^|]+\|?$/'; Optional Pipeline at end
@@ -678,7 +679,7 @@ class CycleCount extends Page
$stock->update([
'bin' => $bin,
'batch' => $this->batch,
// 'doc_no' =>$this->docNo,
'doc_no' =>$this->docNo,
'scanned_quantity' => $newScannedQty,
'scanned_status' => $status,
]);
@@ -721,13 +722,28 @@ class CycleCount extends Page
$parts = explode('|', $value);
$this->itemCode = $parts[0] ?? null;
if (strlen($parts[1]) > strlen($parts[2])) {
if (count($parts) == 2) {
// Format: itemcode|serialnumber
$this->sNo = $parts[1];
$this->batch = $parts[2];
$this->batch = null;
} else {
$this->batch = $parts[1];
$this->sNo = $parts[2];
// Format: itemcode|value1|value2
if (strlen($parts[1]) > strlen($parts[2])) {
$this->sNo = $parts[1];
$this->batch = $parts[2];
} else {
$this->batch = $parts[1];
$this->sNo = $parts[2];
}
}
// if (strlen($parts[1]) > strlen($parts[2])) {
// $this->sNo = $parts[1];
// $this->batch = $parts[2];
// } else {
// $this->batch = $parts[1];
// $this->sNo = $parts[2];
// }
if (strlen($this->itemCode) < 6) {
Notification::make()
@@ -759,7 +775,7 @@ class CycleCount extends Page
]);
return;
} elseif (strlen($this->batch) < 5) {
} elseif (count($parts) !== 2 && strlen($this->batch) < 5) {
Notification::make()
->title('Unknown Batch')
->body("Batch should contain minimum 5 digits '$this->batch'")
@@ -927,7 +943,7 @@ class CycleCount extends Page
'bin' => $bin,
'serial_number' => $this->sNo,
'stickerMasterId' => $stickerMasterId,
'batch' => $this->batch,
'batch' => $this->batch ?? null,
'docNo' => $this->docNo,
'quantity' => $this->quantity,
]),
@@ -1240,7 +1256,7 @@ class CycleCount extends Page
return;
}
if ($serialAgaPlant->batch != '' || $serialAgaPlant->batch != null) {
if (count($parts) !== 2 && ($serialAgaPlant->batch != '' || $serialAgaPlant->batch != null)){
if ($serialAgaPlant->batch != $this->batch) {
@@ -1396,7 +1412,7 @@ class CycleCount extends Page
'bin' => $bin,
'serial_number' => $this->sNo,
'stickerMasterId' => $stickerMasterId,
'batch' => $this->batch,
'batch' => $this->batch ?? null,
'docNo' => $this->docNo,
'quantity' => $this->quantity,
]),
@@ -1415,8 +1431,8 @@ class CycleCount extends Page
$serial->update([
'bin' => $bin ?? null,
'batch' => $this->batch ?? null,
'doc_no' => $this->docNo ?? null,
'batch' => count($parts) !== 2 ? $this->batch : $serial->batch,
// 'doc_no' => $this->docNo ?? null,
'scanned_status' => 'Scanned',
'scanned_quantity' => '1',
'updated_at' => now(),
@@ -2132,6 +2148,7 @@ class CycleCount extends Page
}
}
}
}
protected function getHeaderActions(): array

View File

@@ -2,8 +2,11 @@
namespace App\Filament\Pages;
use App\Mail\VisitorOutMail;
use App\Models\EmployeeMaster;
use App\Models\Plant;
use App\Models\VisitorEntry;
use Carbon\Carbon;
use Filament\Facades\Filament;
use Filament\Pages\Page;
use Filament\Forms\Contracts\HasForms;
@@ -14,6 +17,8 @@ use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Illuminate\Support\Facades\Auth;
use App\Mail\VisitorMail;
use Illuminate\Support\Facades\Mail;
class GateOutEntry extends Page implements HasForms
{
@@ -37,38 +42,182 @@ class GateOutEntry extends Page implements HasForms
->schema([
Section::make('') // You can give your section a title or leave it blank
->schema([
TextInput::make('scan_out_gate_pass')
Select::make('scan_out_gate_pass')
->label('Scan Gate Pass')
->required()
->reactive()
->options([
'In' => 'In',
'Out' => 'Out',
]),
TextInput::make('scan_out_gate_pass_in')
->label('Scan In Gate Pass')
->required()
->reactive()
->visible(fn ($get) => $get('scan_out_gate_pass') == 'In')
->extraAttributes([
'wire:keydown.enter' => 'processGatePassIn($event.target.value)',
]),
TextInput::make('scan_out_gate_pass_out')
->label('Scan Out Gate Pass')
->required()
->reactive()
->visible(fn ($get) => $get('scan_out_gate_pass') == 'Out')
->extraAttributes([
'wire:keydown.enter' => 'processGatePass($event.target.value)',
'wire:keydown.enter' => 'processGatePassOut($event.target.value)',
]),
])
->columns(5)
]);
}
public function processGatePass($gatePass)
public function processGatePassIn($gatePass)
{
$entry = VisitorEntry::where('register_id', $gatePass)->first();
$entry = VisitorEntry::where('register_id', $gatePass)->latest()->first();
if ($entry) {
$entry->out_time = now();
$entry->save();
if ($entry)
{
if($entry->in_time && !$entry->out_time && (empty($entry->valid_upto) || $entry->valid_upto == '' || $entry->valid_upto == null)){
Notification::make()
->title('Already Entered')
->body('Gate pass In has already been processed for entry.')
->warning()
->send();
$this->filters['scan_out_gate_pass_in'] = '';
return;
}
elseif (
!empty($entry->valid_upto) &&
Carbon::parse($entry->valid_upto)->endOfDay()->gte(now())
){
if (empty($entry->out_time)) {
Notification::make()
->title('Gate In Not Allowed')
->body("Previous gate-out has not been punched. Please complete gate-out first for ID ' . $gatePass . '.")
->warning()
->send();
Notification::make()
->title('Gate Pass Processed')
->body('Gate pass has been successfully processed. Visitor marked as exited.')
->success()
->send();
$this->filters['scan_out_gate_pass'] = '';
} else {
$this->filters['scan_out_gate_pass_in'] = '';
return;
}
else{
$newEntry = $entry->replicate();
$newEntry->in_time = now();
$newEntry->out_time = null;
$newEntry->save();
Notification::make()
->title('Gate In')
->body('Gate in has been successfully processed. Visitor marked as entered.')
->success()
->send();
$this->filters['scan_out_gate_pass_in'] = '';
}
}
else{
Notification::make()
->title('Visitor Pass Expired')
->body('Your visitor pass validity has expired.')
->danger()
->send();
$this->filters['scan_out_gate_pass_in'] = '';
return;
}
}
else
{
Notification::make()
->title('Invalid Gate Pass')
->body('The scanned gate pass is not valid. Please try again.')
->body('Scanned gate in pass is not valid.')
->danger()
->send();
return;
}
}
public function processGatePassOut($gatePass)
{
$entry = VisitorEntry::where('register_id', $gatePass)->latest()->first();
if (!$entry) {
Notification::make()
->title('Invalid Gate Pass')
->body('Scanned gate out pass is not valid.')
->danger()
->send();
$this->filters['scan_out_gate_pass_out'] = '';
return;
}
if (empty($entry->valid_upto) || $entry->valid_upto == '' || $entry->valid_upto == null) {
if (!empty($entry->out_time)) {
Notification::make()
->title('Already Exited')
->body('Gate pass has already been processed.')
->warning()
->send();
$this->filters['scan_out_gate_pass_out'] = '';
return;
}
else
{
$entry->out_time = now();
$entry->save();
$employee = EmployeeMaster::find($entry->employee_master_id);
if ($employee && !empty($employee->email)) {
Mail::to($employee->email)
->send(new VisitorOutMail($entry)); // or ->send()
}
else{
\Log::warning('No email found for employee ID: ' . $entry->employee_master_id);
}
Notification::make()
->title('Gate Pass Processed')
->body('Visitor marked as exited.')
->success()
->send();
$this->filters['scan_out_gate_pass_out'] = '';
return;
}
}
elseif ((empty($entry->valid_upto) || $entry->valid_upto != '' || $entry->valid_upto != null))
{
if (Carbon::parse($entry->valid_upto)->endOfDay()->lt(now()))
{
Notification::make()
->title('Visitor Pass Expired')
->body('Your visitor pass validity has expired.')
->danger()
->send();
$this->filters['scan_out_gate_pass_out'] = '';
return;
}
if (!empty($entry->out_time)) {
Notification::make()
->title('Already Exited')
->body('Gate pass has already been processed.')
->warning()
->send();
$this->filters['scan_out_gate_pass_out'] = '';
return;
}
else{
$entry->out_time = now();
$entry->save();
Notification::make()
->title('Gate Out')
->body('Visitor marked as exited.')
->success()
->send();
$this->filters['scan_out_gate_pass_out'] = '';
}
}
}

View File

@@ -0,0 +1,440 @@
<?php
namespace App\Filament\Pages;
use App\Models\Item;
use App\Models\ItemCharacteristic;
use App\Models\Machine;
use App\Models\Plant;
use App\Models\ProductionOrder;
use App\Models\StickerDetail;
use App\Models\StickerMappingMaster;
use App\Models\StickerStructureDetail;
use App\Models\StickerValidation;
use App\Services\StickerPdfService;
use Filament\Facades\Filament;
use Filament\Notifications\Notification;
use Filament\Pages\Page;
use Filament\Forms\Contracts\HasForms;
use Filament\Forms\Form;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Auth;
class StickerPrint extends Page implements HasForms
{
protected static ?string $navigationIcon = 'heroicon-o-document-text';
protected static string $view = 'filament.pages.sticker-print';
protected static ?string $navigationGroup = 'Customized Sticker Printing';
public array $filters = [];
public $serNo;
public $ref_number;
//public $workCenter;
public function form(Form $form): Form
{
return $form
->statePath('filters')
->schema([
Section::make('')
->schema([
Select::make('plant_id')
->label('Plant')
->reactive()
->options(function(){
$plantId = Filament::auth()->user()->plant_id;
return $plantId
? Plant::where('id',$plantId)
->pluck('name','id')
: Plant::pluck('name','id');
})
->required(),
Select::make('machine_id')
->label('Work Center')
->reactive()
->options(function(callable $get){
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return Machine::where('plant_id', $plantId)->pluck('work_center', 'id');
})
->required(),
TextInput::make('production_order')
->label('Production Order')
->reactive()
->required(),
TextInput::make('serial_number')
->label('Serial Number')
->reactive()
->extraAttributes([
'wire:keydown.enter' => 'processSnoNo($event.target.value)',
]),
])
->columns(4),
]);
}
public function processSnoNo($qrcode)
{
$parts = explode('|', $qrcode, 2);
$itemCode = $parts[0] ?? null;
$serialNumber = $parts[1] ?? null;
$plantId = $this->form->getState()['plant_id'];
$plantId = trim($plantId) ?? null;
$workCenter = $this->form->getState()['machine_id'];
$prodOrderNo= $this->form->getState()['production_order'];
$prodOrderNo = trim($prodOrderNo) ?? null;
if (!$qrcode || !preg_match('/^\d+\|\d+$/', $qrcode)) {
Notification::make()
->title('Invalid QR Code')
->body('QR code format should be like: 123456|12456456464')
->danger()
->send();
$this->form->fill([
'plant_id' => $plantId,
'machine_id' => $workCenter,
'production_order' => $prodOrderNo,
'serial_number' => null,
]);
return;
}
elseif (!preg_match('/^[A-Za-z0-9]+$/', $itemCode)) {
Notification::make()
->title('Invalid Item Code')
->body('Item code should contain only alpha-numeric values.')
->danger()
->send();
$this->form->fill([
'plant_id' => $plantId,
'machine_id' => $workCenter,
'production_order' => $prodOrderNo,
'serial_number' => null,
]);
return;
}
elseif (!preg_match('/^[A-Za-z0-9]+$/', $serialNumber)) {
Notification::make()
->title('Invalid Serial Number')
->body('Serial number should contain only alpha-numeric values.')
->danger()
->send();
$this->form->fill([
'plant_id' => $plantId,
'machine_id' => $workCenter,
'production_order' => $prodOrderNo,
'serial_number' => null,
]);
return;
}
$plant = Plant::find($plantId);
$plantName = $plant ? $plant->name : null;
$pOrderExist = ProductionOrder::where('plant_id', $plantId)
->where('production_order', $prodOrderNo)
->first();
if(!$pOrderExist){
Notification::make()
->title('Unknown Production Order')
->body("Production Order not found against plant '$plantName'.")
->danger()
->send();
$this->form->fill([
'plant_id' => $plantId,
'machine_id' => $workCenter,
'production_order' => $prodOrderNo,
'serial_number' => null,
]);
return;
}
$itemExist = Item::where('code', $itemCode)->first();
$itemAgaPlant = Item::where('code', $itemCode)->where('plant_id', $plantId)->first();
if(!$itemExist){
Notification::make()
->title('Unknown Item Code')
->body("Item code '$itemCode' not found.")
->danger()
->send();
$this->form->fill([
'plant_id' => $plantId,
'machine_id' => $workCenter,
'production_order' => $prodOrderNo,
'serial_number' => null,
]);
return;
}
elseif(!$itemAgaPlant){
Notification::make()
->title('Unknown Item Code')
->body("Item code '$itemCode' not found against the the plant '$plantName'.")
->danger()
->send();
$this->form->fill([
'plant_id' => $plantId,
'machine_id' => $workCenter,
'production_order' => $prodOrderNo,
'serial_number' => null,
]);
return;
}
elseif ($itemAgaPlant->id != $pOrderExist->item_id) {
Notification::make()
->title('Item Code Mismatch')
->body("Item code '$itemCode' does not match the item associated with production order '$prodOrderNo'.")
->danger()
->send();
$this->form->fill([
'plant_id' => $plantId,
'machine_id' => $workCenter,
'production_order' => $prodOrderNo,
'serial_number' => null,
]);
return;
}
$productionOrders = ProductionOrder::where('plant_id', $plantId)
->where('production_order', $prodOrderNo)
->where('item_id', $itemAgaPlant->id)
->get();
$serialExist = null;
foreach ($productionOrders as $productionOrder) {
for (
$serial = (int) $productionOrder->from_serial_number;
$serial <= (int) $productionOrder->to_serial_number;
$serial++
) {
if ($serial == (int) $serialNumber) {
$serialExist = $productionOrder;
break 2;
}
}
}
if(!$serialExist){
Notification::make()
->title('Serial Number Not Found')
->body("Serial number '$serialNumber' not found for production order '$prodOrderNo', item '$itemCode' and plant '$plantName'.")
->danger()
->send();
$this->form->fill([
'plant_id' => $plantId,
'machine_id' => $workCenter,
'production_order' => $prodOrderNo,
'serial_number' => null,
]);
return;
}
//..Generate Sticker PDF and download it
$this->ref_number = $this->form->getState()['production_order'];
$this->serNo = $serialNumber;
$user = Filament::auth()->user();
$operatorName = $user->name;
$duplicate = StickerValidation::where('plant_id', $plantId)
->where('production_order', $this->ref_number)
->where('serial_number', $serialNumber)
->first();
if ($duplicate) {
Notification::make()
->danger()
->title('Duplicate Serial Number')
->body("Serial number $serialNumber already exists for this plant and production order!")
->seconds(3)
->send();
$this->form->fill([
'plant_id' => $plantId,
'machine_id' => $workCenter,
'production_order' => $this->ref_number,
'serial_number' => null,
]);
return;
}
$itemC = Item::where('code', $itemCode)
->where('plant_id',$plantId)
->first();
$itemId = $itemC->id;
$item = ItemCharacteristic::where('item_id', $itemId)
->where('plant_id',$plantId)
->first();
$itemI = $item->id;
$mapping = StickerMappingMaster::where('plant_id', $plantId)
->where('sticker1_machine_id', $workCenter)
->where('item_characteristic_id', $itemI)
->first();
if (!$mapping) {
Notification::make()
->danger()
->title('Sticker Mapping Not Found')
->body("No sticker mapping found for this item and plant.")
->send();
return;
}
$stickers = [];
for ($i = 1; $i <= 8; $i++) {
$machineColumn = "sticker{$i}_machine_id";
$ipColumn = "sticker{$i}_print_ip";
$stickerColumn = "sticker_structure{$i}_id";
$itemColumn = "item_characteristic_id";
if (
!empty($mapping->$machineColumn) &&
!empty($mapping->$stickerColumn)
) {
$stickers[] = [
'machine_id' => $mapping->$machineColumn,
'sticker_id' => $mapping->$stickerColumn,
'item_characteristic' => $mapping->$itemColumn,
'print_ip' => $mapping->$ipColumn,
];
}
}
if (empty($stickers)) {
Notification::make()
->danger()
->title('No Sticker Configuration Found')
->body('No sticker and machine mappings configured for this item and plant.')
->send();
return;
}
StickerValidation::create([
'plant_id' => $plantId,
'machine_id' => $workCenter,
'production_order' => $this->ref_number ?? null,
'serial_number' => $serialNumber,
'status' => 'Printed',
// 'sticker_id' => $matchedSticker,
'created_by' => $operatorName,
'created_at' => now(),
'updated_at' => now(),
]);
Notification::make()
->success()
->title('Sticker Recorded')
->body("Item: $itemCode, Serial: $serialNumber recorded successfully!")
->seconds(3)
->send();
$this->form->fill([
'plant_id' => $plantId,
'machine_id' => $workCenter,
'production_order' => $this->ref_number,
'serial_number' => null,
]);
$pdfUrls = [];
foreach ($stickers as $sticker)
{
$structure = StickerStructureDetail::findOrFail($sticker['sticker_id']);
$itemCharacteristic = ItemCharacteristic::where('plant_id', $plantId)
->where('id', $sticker['item_characteristic'])
->firstOrFail();
$dynamicElements = StickerDetail::where(
'sticker_structure_detail_id',
$structure->id
)->where('element_type', 'Dynamic')->get();
$pdfContent = (new StickerPdfService())->generatePdf1(
$structure->sticker_id,
$dynamicElements,
$itemCharacteristic,
$serialNumber,
$itemCode,
$plantId
);
$tempPdfPath = storage_path('app/temp_sticker_' . uniqid() . '.pdf');
file_put_contents($tempPdfPath, $pdfContent);
// $pdfUrl = route('sticker.preview', [
// 'path' => basename($tempPdfPath),
// ]);
$pdfUrls[] = route('sticker.preview', ['path' => basename($tempPdfPath)]);
}
$this->dispatch('open-sticker-pdf', urls: $pdfUrls);
Notification::make()
->success()
->title('Sticker Printed')
->body("Sticker for Serial Number: $serialNumber printed successfully!")
->seconds(3)
->send();
}
public static function canAccess(): bool
{
return Auth::check() && Auth::user()->can('view sticker print page');
}
}

View File

@@ -0,0 +1,240 @@
<?php
namespace App\Filament\Pages;
use App\Models\Item;
use App\Models\ItemCharacteristic;
use App\Models\Plant;
use App\Models\StickerDetail;
use App\Models\StickerStructureDetail;
use App\Services\StickerPdfService;
use Filament\Facades\Filament;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\ViewField;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Notifications\Notification;
use Filament\Pages\Dashboard\Concerns\HasFiltersForm;
use Filament\Pages\Page;
use Illuminate\Support\Facades\Auth;
class StickerStructurePreviewPage extends Page
{
use HasFiltersForm;
protected static ?string $navigationIcon = 'heroicon-o-document-text';
protected static string $view = 'filament.pages.sticker-structure-preview-page';
protected static ?string $navigationGroup = 'Customized Sticker Printing';
public $stickerId;
public $plantId;
public $itemId;
public ?string $pdfPreview = null;
// public array $filters = [];
public function mount(): void
{
session()->forget(['stick_id', 'selected_plant', 'selected_item']);
$this->form->fill([
'sticker_id' => null,
'plant' => null,
'item' => null,
]);
}
public function form(Form $form): Form
{
return $form
->statePath('filters') // Store form state in 'filters'
->schema([
Section::make('')
->schema([
Select::make('sticker_id')
->label('Sticker ID')
->nullable()
->options(function (callable $get) {
return StickerStructureDetail::orderByDesc('id')->pluck('sticker_id', 'sticker_id')->toArray();
})
->afterStateUpdated(callback: function ($state, callable $set) {
session(['stick_id' => $state]);
$set('plant', null);
$set('item', null);
$this->pdfPreview = null;
})
->searchable()
->reactive()
->required(),
Select::make('plant')
->label('Select Plant')
->reactive()
// ->options(Plant::pluck('name', 'id'))
->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id;
return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray();
})
->afterStateUpdated(function ($state, callable $set) {
session(['stick_id' => $state]);
session(['selected_plant' => $state]);
$set('item', null);
session()->forget('item');
$this->pdfPreview = null;
}),
Select::make('item')
->label('Search by Item Code')
->nullable()
->options(function (callable $get) {
$plant = $get('plant');
return $plant ? ItemCharacteristic::where('plant_id', $plant)->with('item')->get()->pluck('item.code', 'id')->toArray() : []; // ->orderBy('plant_id')
})
->afterStateUpdated(function ($state, callable $set) {
session(['stick_id' => $state]);
session(['selected_plant' => $state]);
session(['selected_item' => $state]);
$this->pdfPreview = null;
// $set('item_id', null);
// session()->forget('item');
})
->searchable()
->reactive(),
// ViewField::make('generate_template')
// ->view('fields.generate-template-preview')
// ->reactive()
// // ->key(fn ($get) => 'generate-template' . ($get('sticker_id_live') ?? 'empty'))
// ->key(fn (Get $get) => 'generate-template-'.
// ($get('sticker_id') ?? 'empty').'-'.
// ($get('plant') ?? 'empty').'-'.
// ($get('item_characteristic_id') ?? 'empty')
// )
// // ->viewData(fn (Get $get) => [
// // 'sticker_id' => $get('sticker_id_live') ?? 'empty',
// // ]),
// ->viewData(fn (Get $get) => [
// 'sticker_id' => $get('sticker_id') ?? 'empty',
// 'plant_id' => $get('plant') ?? 'empty',
// 'item_characteristic_id' => $get('item') ?? 'empty',
// ])
// ->hidden(fn (callable $get) => ($get('sticker_id') == null || $get('sticker_id') == '0' || empty($get('sticker_id'))) || (($get('plant') != null || $get('plant') != '') &&
// ($get('item') == null || $get('item') == '' || empty($get('item'))))),
])
->columns(3),
]);
}
public function showPreview()
{
$state = $this->form->getState();
$stickerId = trim($state['sticker_id'] ?? '') ?: null;
// $stickerId = $this->form->getState()['sticker_id'];
// $stickerId = trim($stickerId) ?? null;
$this->stickerId = $stickerId;
$plantId = trim($state['plant'] ?? '') ?: null;
// $plantId = $this->form->getState()['plant'];
// $plantId = trim($plantId) ?? null;
$this->plantId = $plantId;
$itemId = trim($state['item'] ?? '') ?: null;
// $itemId = $this->form->getState()['item'];
// $itemId = trim($itemId) ?? null;
$this->itemId = $itemId;
$this->pdfPreview = null;
// $operatorName = Filament::auth()->user()->name;
if (! $stickerId) {
Notification::make()->title('Please select a Sticker ID first!')->danger()->duration(2000)->send();
$this->form->fill([
'sticker_id' => $stickerId ?? null,
'plant' => $plantId ?? null,
'item' => $itemId ?? null,
]);
return;
} elseif ($plantId && ! $itemId) {
Notification::make()->title('Please select an Item Code!')->danger()->duration(2000)->send();
$this->form->fill([
'sticker_id' => $stickerId,
'plant' => $plantId ?? null,
'item' => $itemId ?? null,
]);
return;
} elseif ($stickerId && $plantId && $itemId != null && $itemId != '') {
$itemCharacteristic = $itemId ? ItemCharacteristic::find($itemId) : null;
$structure = StickerStructureDetail::where('sticker_id', $stickerId)->first();
if (! $structure) {
Notification::make()->title('Sticker structure not found!')->danger()->send();
return;
}
$dynamicElements = StickerDetail::where('sticker_structure_detail_id', $structure->id)->get();
try {
$stickerPdfService = new StickerPdfService;
$this->pdfPreview = $stickerPdfService->generateStickerItem($stickerId, $dynamicElements, $itemCharacteristic);
Notification::make()
->title('Sticker Preview Generated!')
->success()
->duration(2000)
->send();
} catch (\Exception $e) {
Notification::make()
->title('Error generating sticker preview!')
->body($e->getMessage())
->danger()
->send();
}
} else {
$elements = StickerStructureDetail::where('sticker_id', $stickerId)->first();
try {
$stickerPdfService = new StickerPdfService;
$this->pdfPreview = $stickerPdfService->generateSticker($stickerId, $elements->toArray());
Notification::make()
->title('Sticker Preview Generated!')
->success()
->duration(2000)
->send();
} catch (\Exception $e) {
Notification::make()
->title('Error generating sticker preview!')
->body($e->getMessage())
->danger()
->send();
}
}
}
public static function getNavigationLabel(): string
{
return 'Sticker Structure Preview';
}
public function getHeading(): string
{
return 'Sticker Structure Preview';
}
public static function canAccess(): bool
{
return Auth::check() && Auth::user()->can('view sticker structure preview');
}
}

View File

@@ -15,6 +15,7 @@ use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Illuminate\Support\Facades\Log;
class WireMasterPrint extends Page
{
@@ -77,41 +78,69 @@ class WireMasterPrint extends Page
return [];
}
return CustomerPoMaster::where('plant_id', $plantId)->pluck('customer_po', 'id');
return CustomerPoMaster::where('plant_id', $plantId)->distinct()->pluck('customer_po', 'customer_po'); //->pluck('customer_po', 'id'); ->distinct()
})
->required(),
select::make('scan_pallet_no')
->required()
->afterStateUpdated(function ($state, callable $set) {
$set('scan_pallet_no', null);
}),
Select::make('scan_pallet_no')
->label('Scan Pallet No')
->reactive()
->searchable()
->options(function ($get) {
$plantId = $get('plant_id');
$customerPoId = $get('customer_po_master_id');
// $plantId = $get('plant_id');
// $customerPoId = $get('customer_po_master_id');
if (! $plantId || ! $customerPoId) {
// if (! $plantId || ! $customerPoId) {
// return [];
// }
// $palletNumbers = WireMasterPacking::query()
// ->select('wire_packing_number')
// ->where('plant_id', $plantId)
// ->where('customer_po_master_id', $customerPoId)
// ->whereNotNull('wire_packing_number')
// ->groupBy('wire_packing_number')
// ->havingRaw('COUNT(*) = COUNT(wire_packing_status)')
// ->havingRaw("SUM(CASE WHEN TRIM(wire_packing_status) = '' THEN 1 ELSE 0 END) = 0")
// ->orderBy('wire_packing_number', 'asc')
// ->pluck('wire_packing_number')
// ->toArray();
// return collect($palletNumbers)
// ->mapWithKeys(fn ($number) => [$number => $number])
// ->toArray();
//..New Logic
$plantId = $get('plant_id');
$customerPo = $get('customer_po_master_id');
if (! $plantId || ! $customerPo)
{
return [];
}
$poIds = CustomerPoMaster::where('plant_id', $plantId)->where('customer_po', $customerPo)->pluck('id');
$palletNumbers = WireMasterPacking::query()
->select('wire_packing_number')
->where('plant_id', $plantId)
->where('customer_po_master_id', $customerPoId)
->whereIn('customer_po_master_id', $poIds)
->whereNotNull('wire_packing_number')
->groupBy('wire_packing_number')
->havingRaw('COUNT(*) = COUNT(wire_packing_status)')
->havingRaw("SUM(CASE WHEN TRIM(wire_packing_status) = '' THEN 1 ELSE 0 END) = 0")
->orderBy('wire_packing_number', 'asc')
->orderBy('wire_packing_number')
->pluck('wire_packing_number')
->toArray();
return collect($palletNumbers)
->mapWithKeys(fn ($number) => [$number => $number])
->toArray();
return collect($palletNumbers) ->mapWithKeys(fn ($number) => [$number => $number]) ->toArray();
})
->afterStateUpdated(function ($state, callable $set, $get) {
$palletNo = $state;
$plantId = $get('plant_id');
$this->dispatch('loadData', $palletNo, $plantId);
})
->extraAttributes([

View File

@@ -8,6 +8,7 @@ use App\Filament\Resources\AlertMailRuleResource\Pages;
use App\Models\AlertMailRule;
use App\Models\InvoiceMaster;
use App\Models\Plant;
use App\Models\Machine;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Components\Actions\Action;
@@ -49,6 +50,25 @@ class AlertMailRuleResource extends Resource
->required(fn ($get) => ! $get('is_active'))
->afterStateUpdated(fn ($state, callable $set) => $state ? $set('is_active', false) : null),
// ->options(fn () => Plant::pluck('id', 'name')->toArray()),
Forms\Components\Select::make('machine_id')
->label('Work Center')
->options(function (callable $get) {
$plantId = $get('plant');
if (!$plantId) {
return [];
}
return Machine::where('plant_id', $plantId)
->whereNotNull('work_center')
->pluck('work_center', 'id')
->toArray();
})
->searchable()
->reactive()
->afterStateUpdated(function (callable $set) {
$set('module', null);
}),
Forms\Components\Select::make('module')
->label('Module')
->required()
@@ -60,6 +80,8 @@ class AlertMailRuleResource extends Resource
'InvoiceTransit' => 'InvoiceTransit',
'ImportTransit' => 'ImportTransit',
'VehicleReport' => 'VehicleReport',
'ExportDispatchReport' => 'ExportDispatchReport',
'LaserStopReport' => 'LaserStopReport'
]),
Forms\Components\Select::make('rule_name')
->label('Rule Name')
@@ -73,6 +95,8 @@ class AlertMailRuleResource extends Resource
'InvoiceTransitMail' => 'Invoice Transit Mail',
'ImportTransitMail' => 'Import Transit Mail',
'VehicleReportMail' => 'Vehicle Report Mail',
'ExportDispatchReportMail' => 'Export Dispatch Report Mail',
'LaserStopMail' => 'Laser Stop Mail'
])
->required(),
Forms\Components\TextInput::make('email')
@@ -183,6 +207,11 @@ class AlertMailRuleResource extends Resource
return $plants[$state] ?? 'All Plants';
}),
Tables\Columns\TextColumn::make('machine.work_center')
->label('Work Center')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('module')
->label('Module Name')
->alignCenter()
@@ -193,14 +222,14 @@ class AlertMailRuleResource extends Resource
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('invoiceMaster.receiving_plant_name')
->label('Receiving Plant')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('invoiceMaster.transport_name')
->label('Transporter')
->alignCenter()
->sortable(),
// Tables\Columns\TextColumn::make('invoiceMaster.receiving_plant_name')
// ->label('Receiving Plant')
// ->alignCenter()
// ->sortable(),
// Tables\Columns\TextColumn::make('invoiceMaster.transport_name')
// ->label('Transporter')
// ->alignCenter()
// ->sortable(),
Tables\Columns\TextColumn::make('email')
->label('TO Emails')
->searchable()

View File

@@ -285,27 +285,27 @@ class AsrsItemValidationResource extends Resource
$status = $data['status'] ?? 'NotUpdated';
// Hide all records initially if no filters are applied
// if (empty($data['Plant']) && empty($data['item_code']) && empty($data['status']) && empty($data['created_from']) && empty($data['created_to'])) {
// // return $query->whereRaw('1 = 0');
// $query->where('status', 'NotUpdated');
// }
if (
empty($data['Plant']) &&
empty($data['item_code']) &&
empty($data['uom']) &&
empty($data['status']) &&
empty($data['created_from']) &&
empty($data['created_to'])
) {
if (empty($data['Plant']) && empty($data['item_code']) && empty($data['uom']) && empty($data['status']) && empty($data['created_from']) && empty($data['created_to'])) {
return $query->whereRaw('1 = 0');
// $query->where('status', 'NotUpdated');
$query->where(function ($q) {
$q->where('status', 'NotUpdated')
->orWhereNull('status')
->orWhere('status', '');
});
}
// if (
// empty($data['Plant']) &&
// empty($data['item_code']) &&
// empty($data['uom']) &&
// empty($data['status']) &&
// empty($data['created_from']) &&
// empty($data['created_to'])
// ) {
// // $query->where('status', 'NotUpdated');
// $query->where(function ($q) {
// $q->where('status', 'NotUpdated')
// ->orWhereNull('status')
// ->orWhere('status', '');
// });
// }
if (! empty($data['Plant'])) {
$query->where('plant_id', $data['Plant']);
}
@@ -387,11 +387,12 @@ class AsrsItemValidationResource extends Resource
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
// ->hidden(function ($record): bool {
// if (auth()->user()?->hasRole('SuperAdmin')) {
// if (auth()->user()?->hasRole('Super Admin')) {
// return false;
// }
// return trim(strtolower($record->status)) == 'updated';
// else{
// return trim(($record->status)) == 'Updated';
// }
// }),
// ->visible(function ($record): bool {
// return auth()->user()?->hasRole('SuperAdmin')

View File

@@ -0,0 +1,736 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Exports\BeforeTestReadingExporter;
use App\Filament\Resources\BeforeTestReadingResource\Pages;
use App\Models\BeforeTestReading;
use App\Models\Configuration;
use App\Models\Item;
use App\Models\Line;
use App\Models\Machine;
use App\Models\MotorTestingMaster;
use App\Models\Plant;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Filters\Filter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class BeforeTestReadingResource extends Resource
{
protected static ?string $model = BeforeTestReading::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Motor Testing Panel';
protected static ?int $navigationSort = 5;
public static function form(Form $form): Form
{
return $form
->schema([
Section::make('')
->schema([
Forms\Components\Select::make('plant_id')
->label('Plant Name')
->relationship('plant', 'name')
->columnSpan(1) // (['default' => 1, 'sm' => 2])
->searchable()
->required()
->reactive()
->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id;
return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
})
->default(function () {
return optional(BeforeTestReading::latest()->first())->plant_id ?? null;
})
->disabled(fn (Get $get) => ! empty($get('id')))
->afterStateUpdated(function ($state, callable $set, callable $get) {
$plantId = $get('plant_id');
if (! $plantId) {
$set('line_id', null);
$set('motor_testing_master_id', null);
$set('machine_id', null);
$set('tPrError', 'Please select a plant first.');
return;
} else {
$set('line_id', null);
$set('motor_testing_master_id', null);
$set('machine_id', null);
$set('tPrError', null);
}
$set('updated_by', Filament::auth()->user()?->name);
})
->extraAttributes(fn ($get) => [
'class' => $get('tPrError') ? 'border-red-500' : '',
])
->hint(fn ($get) => $get('tPrError') ? $get('tPrError') : null)
->hintColor('danger'),
Forms\Components\Select::make('line_id')
->label('Line Name')
// ->relationship('line', 'name')
->searchable()
->options(function (callable $get) {
$plantId = $get('plant_id');
if (! $plantId) {
return [];
}
return Line::where('plant_id', $plantId)
->pluck('name', 'id')
->toArray();
})
->default(function () {
return optional(BeforeTestReading::latest()->first())->line_id ?? null;
})
->disabled(fn (Get $get) => ! empty($get('id')))
->required()
->reactive()
->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$set('motor_testing_master_id', null);
$set('machine_id', null);
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\Select::make('machine_id')
->label('Work Center')
// ->relationship('machine', 'work_center')
->searchable()
->options(function (callable $get) {
$lineId = $get('line_id');
if (! $lineId) {
return [];
}
// Only show machines for the selected line
return Machine::where('line_id', $lineId)
->pluck('work_center', 'id')
->toArray();
})
->default(function () {
return optional(BeforeTestReading::latest()->first())->machine_id ?? null;
})
->disabled(fn (Get $get) => ! empty($get('id')))
->required()
->reactive()
->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\Select::make('motor_testing_master_id')
->label('Item Code')
// ->relationship('motorTestingMaster', 'item.code')
// ->options(function (callable $get) {
// $plantId = $get('plant_id');
// if (!$plantId) {
// return [];
// }
// return MotorTestingMaster::with('item')
// ->where('plant_id', $plantId)
// ->get()
// //->filter(fn ($mtm) => $mtm->item)
// ->pluck('item.code', 'id')
// ->toArray();
// })
->options(function (callable $get) {
$plantId = $get('plant_id');
if (! $plantId) {
return [];
}
return MotorTestingMaster::query()
->join('items', 'motor_testing_masters.item_id', '=', 'items.id')
->where('motor_testing_masters.plant_id', $plantId)
->select('motor_testing_masters.id', 'items.code')
->pluck('items.code', 'motor_testing_masters.id')
->toArray();
})
// ->getOptionLabelUsing(fn ($value) =>
// MotorTestingMaster::with('item')->find($value)?->item?->code
// )
->required()
->searchable()
->reactive()
->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('serial_number')
->label('Serial Number')
->required()
->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('before_fr_res_ry')
->label('Before FR Resistance RY')
->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('before_fr_res_yb')
->label('Before FR Resistance YB')
->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('before_fr_res_br')
->label('Before FR Resistance BR')
->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('before_fr_ir')
->label('Before FR IR')
->afterStateUpdated(function (callable $set, callable $get, ?string $state) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('tested_by')
->default(fn () => Filament::auth()->user()?->name)
->readOnly()
->required(),
Forms\Components\Hidden::make('updated_by')
->default(fn () => Filament::auth()->user()?->name)
->required(),
Forms\Components\TextInput::make('id')
->hidden()
->readOnly(),
])
->columns(['default' => 1, 'sm' => 2]),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
// Tables\Columns\TextColumn::make('id')
// ->label('ID')
// ->numeric()
// ->sortable(),
Tables\Columns\TextColumn::make('No.')
->label('No.')
->getStateUsing(function ($record, $livewire, $column, $rowLoop) {
$paginator = $livewire->getTableRecords();
$perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10;
$currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1;
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}),
Tables\Columns\TextColumn::make('plant.name')
->label('Plant Name')
->alignCenter(),
Tables\Columns\TextColumn::make('line.name')
->label('Line Name')
->alignCenter(),
Tables\Columns\TextColumn::make('machine.work_center')
->label('Work Center')
->alignCenter(),
Tables\Columns\TextColumn::make('motorTestingMaster.item.code')
->label('Item Code')
->alignCenter(),
Tables\Columns\TextColumn::make('motorTestingMaster.subassembly_code')
->label('Subassembly Code')
->alignCenter(),
Tables\Columns\TextColumn::make('motorTestingMaster.item.description')
->label('Model')
->alignCenter(),
Tables\Columns\TextColumn::make('serial_number')
->label('Serial Number')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('motorTestingMaster.kw')
->label('KW')
->alignCenter(),
Tables\Columns\TextColumn::make('motorTestingMaster.hp')
->label('HP')
->alignCenter(),
Tables\Columns\TextColumn::make('motorTestingMaster.phase')
->label('Phase')
->alignCenter(),
Tables\Columns\TextColumn::make('motorTestingMaster.connection')
->label('Connection')
->alignCenter(),
Tables\Columns\IconColumn::make('motorTestingMaster.isi_model')
->label('ISI Model')
->alignCenter()
->boolean(),
Tables\Columns\TextColumn::make('before_fr_res_ry')
->label('Before FR Resistance RY')
->alignCenter(),
Tables\Columns\TextColumn::make('before_fr_res_yb')
->label('Before FR Resistance YB')
->alignCenter(),
Tables\Columns\TextColumn::make('before_fr_res_br')
->label('Before FR Resistance BR')
->alignCenter(),
Tables\Columns\TextColumn::make('before_fr_ir')
->label('Before FR IR')
->alignCenter(),
Tables\Columns\TextColumn::make('scanned_at')
->label('Scanned At')
->alignCenter()
->sortable()
->dateTime(),
Tables\Columns\TextColumn::make('created_at')
->label('Created At')
->alignCenter()
->dateTime()
->sortable(),
Tables\Columns\TextColumn::make('tested_by')
->label('Tested By')
->alignCenter()
->numeric(),
Tables\Columns\TextColumn::make('updated_at')
->label('Updated At')
->alignCenter()
->sortable()
->dateTime(),
Tables\Columns\TextColumn::make('updated_by')
->label('Updated By')
->alignCenter()
->numeric(),
Tables\Columns\TextColumn::make('deleted_at')
->label('Deleted At')
->alignCenter()
->sortable()
->dateTime()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
Tables\Filters\TrashedFilter::make(),
Filter::make('advanced_filters')
->label('Advanced Filters')
->form([
Select::make('Plant')
->label('Search by Plant Name')
->searchable()
->nullable()
->options(function () {
// return Plant::pluck('name', 'id');
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return Plant::where('id', $userHas)->pluck('name', 'id')->toArray();
} else {
return Plant::whereHas('beforeTestReadings', function ($query) {
$query->whereNotNull('id');
})->orderBy('code')->pluck('name', 'id');
}
// return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
})
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('Line', null);
$set('item_code', null);
}),
Select::make('Line')
->label('Search by Line Name')
->searchable()
->nullable()
->options(function (callable $get) {
$plantId = $get('Plant');
if (! $plantId) {
return [];
}
return Line::where('plant_id', $plantId)
->pluck('name', 'id')
->toArray();
})
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('item_code', null);
}),
Select::make('machine_name')
->label('Search by Work Center')
->searchable()
->nullable()
->options(function (callable $get) {
$plantId = $get('Plant');
$lineId = $get('Line');
if (! $plantId || ! $lineId) {
return [];
}
return Machine::where('plant_id', $plantId)
->where('line_id', $lineId)
->pluck('work_center', 'id')
->toArray();
})
->reactive(),
Select::make('item_code')
->label('Search by Item Code')
->searchable()
->nullable()
->options(function (callable $get) {
$plantId = $get('Plant');
if ($plantId) {
return Item::where('plant_id', $plantId)
->whereHas('motorTestingMasters')
->pluck('code', 'id')
->toArray();
} else {
return [];
// return Item::whereHas('motorTestingMasters')
// ->pluck('code', 'id')
// ->toArray();
}
})
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('item_description', null);
}),
TextInput::make('serial_number')
->label('Serial Number')
->reactive()
->placeholder('Enter Serial Number'),
Select::make('subassembly_code')
->label('Search by Subassembly Code')
->searchable()
->nullable()
->options(function (callable $get) {
$plantId = $get('Plant');
if ($plantId) {
return MotorTestingMaster::whereHas('beforeTestReadings', function ($query) {
$query->whereNotNull('id');
})->whereNotNull('subassembly_code')->orderBy('subassembly_code')->pluck('subassembly_code', 'id');
} else {
return [];
// return Item::whereHas('motorTestingMasters')
// ->pluck('code', 'id')
// ->toArray();
}
})
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('item_description', null);
}),
Select::make('item_description')
->label('Search by Model')
->searchable()
->options(function (callable $get) {
$plantId = $get('Plant');
// $query = Item::query();
// if ($plantId) {
// $query->where('plant_id', $plantId);
// }
$plantId = $get('Plant');
if ($plantId) {
return Item::where('plant_id', $plantId)
->whereHas('motorTestingMasters')
->pluck('description', 'id')
->toArray();
} else {
return [];
// return Item::whereHas('motorTestingMasters')
// ->pluck('description', 'id')
// ->toArray();
}
// return $query->pluck('description', 'description')->toArray();
})
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('item_code', null);
}),
Select::make('connection')
->label('Connection')
->required()
->default('Star')
->options(function (callable $get) {
$plantId = $get('Plant');
if ($plantId) {
return Configuration::where('plant_id', $plantId)
->where('c_name', 'MOTOR_CONNECTION')
->orderBy('created_at')
->pluck('c_value', 'c_value')
->toArray();
} else {
return Configuration::where('c_name', 'MOTOR_CONNECTION')
->orderBy('created_at')
->pluck('c_value', 'c_value')
->toArray();
}
})
->selectablePlaceholder(false)
->reactive(),
Select::make('tested_by')
->label('Tested By')
->nullable()
->options(function (callable $get) {
$plantId = $get('Plant');
if (! $plantId) {
return BeforeTestReading::whereNotNull('tested_by')->select('tested_by')->distinct()->pluck('tested_by', 'tested_by');
} else {
return BeforeTestReading::where('plant_id', $plantId)->whereNotNull('tested_by')->select('tested_by')->distinct()->pluck('tested_by', 'tested_by');
}
})
->searchable()
->reactive(),
DateTimePicker::make(name: 'created_from')
->label('Created From')
->placeholder(placeholder: 'Select From DateTime')
->reactive()
->native(false),
DateTimePicker::make('created_to')
->label('Created To')
->placeholder(placeholder: 'Select To DateTime')
->reactive()
->native(false),
Select::make('updated_by')
->label('Updated By')
->nullable()
->options(function (callable $get) {
$plantId = $get('Plant');
if (! $plantId) {
return BeforeTestReading::whereNotNull('updated_by')->select('updated_by')->distinct()->pluck('updated_by', 'updated_by');
} else {
return BeforeTestReading::where('plant_id', $plantId)->whereNotNull('updated_by')->select('updated_by')->distinct()->pluck('updated_by', 'updated_by');
}
})
->searchable()
->reactive(),
DateTimePicker::make(name: 'updated_from')
->label('Updated From')
->placeholder(placeholder: 'Select From DateTime')
->reactive()
->native(false),
DateTimePicker::make('updated_to')
->label('Updated To')
->placeholder(placeholder: 'Select To DateTime')
->reactive()
->native(false),
])
->query(function ($query, array $data) {
// dd($data);
// Hide all records initially if no filters are applied
if (empty($data['Plant']) && empty($data['Line']) && empty($data['item_code']) && empty($data['subassembly_code']) && empty($data['machine_name']) && empty($data['item_description']) && empty($data['serial_number']) && empty($data['connection']) && empty($data['tested_by']) && empty($data['created_from']) && empty($data['created_to']) && empty($data['updated_by']) && empty($data['updated_from']) && empty($data['updated_to'])) {
return $query->whereRaw('1 = 0');
}
// && empty($data['phase'])
if (! empty($data['Plant'])) {
$query->where('plant_id', $data['Plant']);
} else {
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return $query->whereRaw('1 = 0');
}
}
if (! empty($data['Line'])) {
$query->where('line_id', $data['Line']);
}
if (! empty($data['item_code'])) {
// $query->where('item_id', $data['item_code']);
$query->whereHas('motorTestingMaster', function ($subQuery) use ($data) {
$subQuery->where('item_id', $data['item_code']);
});
}
if (! empty($data['subassembly_code'])) {
$query->where('motor_testing_master_id', $data['subassembly_code']);
}
if (! empty($data['machine_name'])) {
$query->where('machine_id', $data['machine_name']);
}
if (! empty($data['serial_number'])) {
$query->where('serial_number', 'like', '%'.$data['serial_number'].'%');
}
if (! empty($data['item_description'])) {
$itemId = $data['item_description']; // Item::where('description', $data['item_description'])->first()?->id ?? null;
if ($itemId) { // $item
$mastId = MotorTestingMaster::where('item_id', $itemId)->first()?->id ?? null;
if ($mastId) { // $item
$motId = BeforeTestReading::where('motor_testing_master_id', $mastId)->first()?->id ?? null;
if ($motId) { // $item
$query->where('motor_testing_master_id', $mastId);
// $query->whereHas('motorTestingMaster', function ($subQuery) use ($itemId) {
// $subQuery->where('item_id', $itemId); //$item->id
// });
} else {
$query->whereRaw('1 = 0');
}
} else {
$query->whereRaw('1 = 0');
}
} else {
$query->whereRaw('1 = 0');
}
}
// if (!empty($data['phase']))
// {
// //$query->where('phase',$data['phase']);
// $query->whereHas('motorTestingMaster', function ($subQuery) use ($data) {
// $subQuery->where('phase', $data['phase']);
// });
// }
if (! empty($data['connection'])) {
// $query->where('connection',$data['connection']);
$query->whereHas('motorTestingMaster', function ($subQuery) use ($data) {
$subQuery->where('connection', $data['connection']);
});
}
if (! empty($data['created_from'])) {
$query->where('created_at', '>=', $data['created_from']);
}
if (! empty($data['created_to'])) {
$query->where('created_at', '<=', $data['created_to']);
}
if (! empty($data['tested_by'])) {
$query->where('tested_by', $data['tested_by']);
}
if (! empty($data['updated_from'])) {
$query->where('updated_at', '>=', $data['updated_from']);
}
if (! empty($data['updated_to'])) {
$query->where('updated_at', '<=', $data['updated_to']);
}
if (! empty($data['updated_by'])) {
$query->where('updated_by', $data['updated_by']);
}
})
->indicateUsing(function (array $data) {
$indicators = [];
if (! empty($data['Plant'])) {
$indicators[] = 'Plant Name: '.Plant::where('id', $data['Plant'])->value('name');
} else {
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return 'Plant: Choose plant to filter records.';
}
}
if (! empty($data['Line'])) {
$indicators[] = 'Line Name: '.Line::where('id', $data['Line'])->value('name');
}
if (! empty($data['machine_name'])) {
$indicators[] = 'Work Center: '.Machine::where('id', $data['machine_name'])->value('work_center');
}
if (! empty($data['item_code'])) {
$indicators[] = 'Item Code: '.Item::where('id', $data['item_code'])->value('code');
}
if (! empty($data['subassembly_code'])) {
$indicators[] = 'Subassembly Code: '.MotorTestingMaster::where('id', $data['subassembly_code'])->value('subassembly_code');
}
if (! empty($data['item_description'])) {
$item = Item::where('id', $data['item_description'])->first()?->description ?? null;
$indicators[] = 'Model: '.$item;
}
// if (!empty($data['phase'])) {
// $indicators[] = 'Phase: ' . $data['phase'];
// }
if (! empty($data['connection'])) {
$indicators[] = 'Connection: '.$data['connection'];
}
if (! empty($data['serial_number'])) {
$indicators[] = 'Serial Number: '.$data['serial_number'];
}
if (! empty($data['tested_by'])) {
$indicators[] = 'Tested By: '.$data['tested_by'];
}
if (! empty($data['created_from'])) {
$indicators[] = 'Created From: '.$data['created_from'];
}
if (! empty($data['created_to'])) {
$indicators[] = 'Created To: '.$data['created_to'];
}
if (! empty($data['updated_by'])) {
$indicators[] = 'Updated By: '.$data['updated_by'];
}
if (! empty($data['updated_from'])) {
$indicators[] = 'Updated From: '.$data['updated_from'];
}
if (! empty($data['updated_to'])) {
$indicators[] = 'Updated To: '.$data['updated_to'];
}
return $indicators;
}),
])
->filtersFormMaxHeight('280px')
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\ForceDeleteBulkAction::make(),
Tables\Actions\RestoreBulkAction::make(),
]),
])
->headerActions([
ExportAction::make()
->label('Export Before Test Readings')
->color('warning')
->exporter(BeforeTestReadingExporter::class)
->visible(function () {
return Filament::auth()->user()->can('view export before test reading');
}),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListBeforeTestReadings::route('/'),
'create' => Pages\CreateBeforeTestReading::route('/create'),
'view' => Pages\ViewBeforeTestReading::route('/{record}'),
'edit' => Pages\EditBeforeTestReading::route('/{record}/edit'),
];
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}
}

View File

@@ -0,0 +1,12 @@
<?php
namespace App\Filament\Resources\BeforeTestReadingResource\Pages;
use App\Filament\Resources\BeforeTestReadingResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateBeforeTestReading extends CreateRecord
{
protected static string $resource = BeforeTestReadingResource::class;
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Filament\Resources\BeforeTestReadingResource\Pages;
use App\Filament\Resources\BeforeTestReadingResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditBeforeTestReading extends EditRecord
{
protected static string $resource = BeforeTestReadingResource::class;
protected function getHeaderActions(): array
{
return [
Actions\ViewAction::make(),
Actions\DeleteAction::make(),
Actions\ForceDeleteAction::make(),
Actions\RestoreAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\BeforeTestReadingResource\Pages;
use App\Filament\Resources\BeforeTestReadingResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListBeforeTestReadings extends ListRecords
{
protected static string $resource = BeforeTestReadingResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\BeforeTestReadingResource\Pages;
use App\Filament\Resources\BeforeTestReadingResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
class ViewBeforeTestReading extends ViewRecord
{
protected static string $resource = BeforeTestReadingResource::class;
protected function getHeaderActions(): array
{
return [
Actions\EditAction::make(),
];
}
}

View File

@@ -6,25 +6,24 @@ use App\Filament\Exports\CharacteristicApproverMasterExporter;
use App\Filament\Imports\CharacteristicApproverMasterImporter;
use App\Filament\Resources\CharacteristicApproverMasterResource\Pages;
use App\Models\CharacteristicApproverMaster;
use App\Models\Item;
use App\Models\Machine;
use App\Models\Plant;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
use Filament\Tables\Filters\Filter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Illuminate\Validation\Rule;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Tables\Filters\Filter;
class CharacteristicApproverMasterResource extends Resource
{
@@ -34,6 +33,8 @@ class CharacteristicApproverMasterResource extends Resource
protected static ?string $navigationGroup = 'Laser Marking';
protected static ?int $navigationSort = 2;
public static function form(Form $form): Form
{
return $form
@@ -224,7 +225,8 @@ class CharacteristicApproverMasterResource extends Resource
Forms\Components\TextInput::make('duration2')
->label('Duration (HH.MM)')
->reactive()
->length(4)
->minLength(4)
->maxLength(5)
->regex('/^([0-9]|0[0-9]|1[0-9]|2[0-3])\.(0[0-9]|[1-5][0-9])$/')
->validationMessages([
'regex' => 'Duration must be HH.MM format (example: 00.00 - 23.59)',
@@ -256,7 +258,8 @@ class CharacteristicApproverMasterResource extends Resource
Forms\Components\TextInput::make('duration3')
->label('Duration (HH.MM)')
->reactive()
->length(4)
->minLength(4)
->maxLength(5)
->regex('/^([0-9]|0[0-9]|1[0-9]|2[0-3])\.(0[0-9]|[1-5][0-9])$/')
->validationMessages([
'regex' => 'Duration must be HH.MM format (example: 00.00 - 23.59)',
@@ -411,7 +414,7 @@ class CharacteristicApproverMasterResource extends Resource
if ($userHas && strlen($userHas) > 0) {
return Plant::where('id', $userHas)->pluck('name', 'id')->toArray();
} else {
return Plant::whereHas('requestCharacteristics', function ($query) {
return Plant::whereHas('characteristicApproverMaster', function ($query) {
$query->whereNotNull('id');
})->orderBy('code')->pluck('name', 'id');
}
@@ -434,7 +437,7 @@ class CharacteristicApproverMasterResource extends Resource
return [];
}
return Machine::whereHas('requestCharacteristics', function ($query) use ($plantId) {
return Machine::whereHas('characteristicApproverMaster', function ($query) use ($plantId) {
if ($plantId) {
$query->where('plant_id', $plantId);
}

View File

@@ -11,22 +11,22 @@ use App\Models\Machine;
use App\Models\Plant;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
use Filament\Tables\Filters\Filter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Illuminate\Validation\Rule;
use Str;
use Filament\Tables\Filters\Filter;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
class ClassCharacteristicResource extends Resource
{
@@ -974,6 +974,12 @@ class ClassCharacteristicResource extends Resource
->afterStateUpdated(function (callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('zmm_axial_force')
->label('ZMM AXIAL FORCE')
->reactive()
->afterStateUpdated(function (callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('mark_status')
->label('MARKED STATUS')
->reactive()
@@ -1814,6 +1820,10 @@ class ClassCharacteristicResource extends Resource
->label('ZMM OPERATING TEMPERATURE')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('zmm_axial_force')
->label('ZMM AXIAL FORCE')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('mark_status')
->label('MARKED STATUS')
->alignCenter()

View File

@@ -82,6 +82,13 @@ class CustomerPoMasterResource extends Resource
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}),
Tables\Columns\TextColumn::make('id')
->label('ID')
->numeric()
->alignCenter()
->sortable()
->searchable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('plant.name')
->label('Plant')
->alignCenter()
@@ -110,10 +117,18 @@ class CustomerPoMasterResource extends Resource
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('created_by')
->label('Created By')
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('updated_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('updated_by')
->label('Updated By')
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('deleted_at')
->dateTime()
->sortable()

View File

@@ -0,0 +1,209 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\DealerVisitPlanResource\Pages;
use App\Filament\Resources\DealerVisitPlanResource\RelationManagers;
use App\Models\DealerVisitPlan;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
use App\Filament\Exports\DealerVisitPlanExporter;
use App\Filament\Imports\DealerVisitPlanImporter;
class DealerVisitPlanResource extends Resource
{
protected static ?string $model = DealerVisitPlan::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Gate Entry';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('organizer')
->label('Organizer'),
Forms\Components\TextInput::make('mobile_number')
->label('Mobile Number'),
Forms\Components\TextInput::make('name')
->label('Dealer Name'),
Forms\Components\TextInput::make('company')
->label('Dealer Company'),
Forms\Components\DatePicker::make('visit_plan_date')
->label('Visit Plan Date'),
Forms\Components\Select::make('employee_master_id')
->label('Recipient Employee')
->relationship('employeeMaster', 'name')
->required(),
Forms\Components\TextInput::make('number_of_person')
->label('Number Of Person'),
Forms\Components\TextInput::make('purpose_of_visit')
->label('Purpose Of Visit'),
Forms\Components\Select::make('mode_of_travel')
->label('Mode Of Travel')
->options([
'Rental' => 'Rental',
'Car' => 'Car',
'Bike' => 'Bike',
])
->reactive()
->placeholder('Select Mode of Travel'),
Forms\Components\Select::make('status')
->label('Status')
->options([
'Planned' => 'Planned',
'Completed' => 'Completed',
])
->required(),
Forms\Components\Hidden::make('created_by')
->label('Created By')
->default(Filament::auth()->user()?->name),
Forms\Components\Hidden::make('updated_by')
->label('Updated By')
->default(Filament::auth()->user()?->name),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('No.')
->label('No.')
->getStateUsing(function ($record, $livewire, $column, $rowLoop) {
$paginator = $livewire->getTableRecords();
$perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10;
$currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1;
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}),
Tables\Columns\TextColumn::make('name')
->label('Dealer Name')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('company')
->label('Dealer Company')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('visit_plan_date')
->label('Visit Plan Date')
->alignCenter()
->searchable()
->date()
->sortable(),
Tables\Columns\TextColumn::make('organizer')
->label('Organizer')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('mobile_number')
->label('Mobile Number')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('employeeMaster.name')
->label('Recipient Employee')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('number_of_person')
->label('No of Person')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('purpose_of_visit')
->label('Purpose of Visit')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('mode_of_travel')
->label('Mode of travel')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('status')
->label('Status')
->alignCenter()
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('created_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('updated_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('deleted_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
Tables\Filters\TrashedFilter::make(),
])
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\ForceDeleteBulkAction::make(),
Tables\Actions\RestoreBulkAction::make(),
]),
])
->headerActions([
ImportAction::make()
->label('Import Dealer Visit Plan')
->color('warning')
->importer(DealerVisitPlanImporter::class)
->visible(function () {
return Filament::auth()->user()->can('view import dealer visit plan');
}),
ExportAction::make()
->label('Export Dealer Visit Plan')
->color('warning')
->exporter(DealerVisitPlanExporter::class)
->visible(function () {
return Filament::auth()->user()->can('view export dealer visit plan');
}),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListDealerVisitPlans::route('/'),
'create' => Pages\CreateDealerVisitPlan::route('/create'),
'view' => Pages\ViewDealerVisitPlan::route('/{record}'),
'edit' => Pages\EditDealerVisitPlan::route('/{record}/edit'),
];
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}
}

View File

@@ -0,0 +1,12 @@
<?php
namespace App\Filament\Resources\DealerVisitPlanResource\Pages;
use App\Filament\Resources\DealerVisitPlanResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateDealerVisitPlan extends CreateRecord
{
protected static string $resource = DealerVisitPlanResource::class;
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Filament\Resources\DealerVisitPlanResource\Pages;
use App\Filament\Resources\DealerVisitPlanResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditDealerVisitPlan extends EditRecord
{
protected static string $resource = DealerVisitPlanResource::class;
protected function getHeaderActions(): array
{
return [
Actions\ViewAction::make(),
Actions\DeleteAction::make(),
Actions\ForceDeleteAction::make(),
Actions\RestoreAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\DealerVisitPlanResource\Pages;
use App\Filament\Resources\DealerVisitPlanResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListDealerVisitPlans extends ListRecords
{
protected static string $resource = DealerVisitPlanResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\DealerVisitPlanResource\Pages;
use App\Filament\Resources\DealerVisitPlanResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
class ViewDealerVisitPlan extends ViewRecord
{
protected static string $resource = DealerVisitPlanResource::class;
protected function getHeaderActions(): array
{
return [
Actions\EditAction::make(),
];
}
}

View File

@@ -12,6 +12,7 @@ use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Components\Actions\Action;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Notifications\Notification;
use Filament\Resources\Resource;
use Filament\Tables;
@@ -39,18 +40,32 @@ class EquipmentMasterResource extends Resource
return $form
->schema([
Forms\Components\Select::make('plant_id')
->label('Plant')
->reactive()
->label('Plant Name')
->relationship('plant', 'name')
->required()
->searchable()
->reactive()
->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id;
return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
})
->required(),
->disabled(fn (Get $get) => ! empty($get('id')))
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('machine_id', null);
$set('updated_by', Filament::auth()->user()?->name);
})
->default(function () {
$userHas = Filament::auth()->user()->plant_id;
return ($userHas && strlen($userHas) > 0) ? $userHas : optional(EquipmentMaster::latest()->first())->plant_id;
}),
Forms\Components\Select::make('machine_id')
// ->relationship('machine', 'name')
->label('Work Center')
->required()
->searchable()
->reactive()
->options(function (callable $get) {
$plantId = $get('plant_id');
@@ -60,15 +75,30 @@ class EquipmentMasterResource extends Resource
return \App\Models\Machine::where('plant_id', $plantId)->pluck('work_center', 'id');
})
->required(),
->disabled(fn (Get $get) => ! empty($get('id')))
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('name')
->label('Name'),
->label('Name')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('description')
->label('Description'),
->label('Description')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('make')
->label('Make'),
->label('Make')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('model')
->label('Model'),
->label('Model')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('equipment_number')
->label('Equipment Number')
->reactive()
@@ -82,6 +112,8 @@ class EquipmentMasterResource extends Resource
];
})
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
if (! $state) {
return;
}
@@ -108,7 +140,10 @@ class EquipmentMasterResource extends Resource
// }
// }),
Forms\Components\TextInput::make('instrument_serial_number')
->label('Instrument Serial Number'),
->label('Instrument Serial Number')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
// Forms\Components\DateTimePicker::make('calibrated_on')
// ->label('Calibrated On')
// ->required(),
@@ -128,6 +163,7 @@ class EquipmentMasterResource extends Resource
$frequency = $get('frequency') ?? '1';
$nextDate = self::calculateNextCalibrationDate($state, $frequency);
$set('next_calibration_date', $nextDate);
$set('updated_by', Filament::auth()->user()?->name);
}),
// ->afterStateUpdated(function ($state, callable $get, callable $set) {
// $frequency = (int) $get('frequency');
@@ -152,6 +188,7 @@ class EquipmentMasterResource extends Resource
$calibratedOn = $get('calibrated_on');
$nextDate = self::calculateNextCalibrationDate($calibratedOn, $state);
$set('next_calibration_date', $nextDate);
$set('updated_by', Filament::auth()->user()?->name);
}),
// ->afterStateUpdated(function ($state, callable $get, callable $set) {
// $calibratedOn = $get('calibrated_on');
@@ -171,12 +208,21 @@ class EquipmentMasterResource extends Resource
Forms\Components\DateTimePicker::make('next_calibration_date')
->label('Next Calibration Date')
->readOnly()
->required(),
->required()
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('calibrated_by')
->label('Calibrated By'),
->label('Calibrated By')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\Textarea::make('calibration_certificate')
->label('Calibration Certificate'),
->label('Calibration Certificate')
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\FileUpload::make('attachment')
->label('PDF Upload')
@@ -185,7 +231,10 @@ class EquipmentMasterResource extends Resource
->disk('local')
->directory('uploads/temp')
->preserveFilenames()
->reactive(),
->reactive()
->afterStateUpdated(function ($state, callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
// Forms\Components\Actions::make([
// Action::make('uploadNow')
@@ -341,7 +390,11 @@ class EquipmentMasterResource extends Resource
->label('Created By')
->default(Filament::auth()->user()?->name),
Forms\Components\Hidden::make('updated_by')
->label('Updated By'),
->label('Updated By')
->default(Filament::auth()->user()?->name),
Forms\Components\TextInput::make('id')
->hidden()
->readOnly(),
]);
}
@@ -359,7 +412,7 @@ class EquipmentMasterResource extends Resource
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}),
Tables\Columns\TextColumn::make('plant.name')
->label('Plant')
->label('Plant Name')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('machine.work_center')
@@ -413,24 +466,30 @@ class EquipmentMasterResource extends Resource
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('created_by')
->label('Created Bys')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('updated_by')
->label('Updated By')
->label('Created By')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('created_at')
->label('Created At')
->dateTime()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('updated_by')
->label('Updated By')
->alignCenter()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
->toggleable(isToggledHiddenByDefault: false),
Tables\Columns\TextColumn::make('updated_at')
->label('Updated At')
->dateTime()
->alignCenter()
->sortable()
->toggleable(isToggledHiddenByDefault: false),
Tables\Columns\TextColumn::make('deleted_at')
->label('Deleted At')
->dateTime()
->alignCenter()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([

View File

@@ -77,42 +77,48 @@ class GuardPatrolEntryResource extends Resource
])
->hint(fn ($get) => $get('gPePlantError') ? $get('gPePlantError') : null)
->hintColor('danger'),
Forms\Components\Select::make('guard_name_id')
// Forms\Components\Select::make('guard_name_id')
// ->label('Guard Name')
// // ->relationship('guardNames', 'name')
// ->options(function (callable $get) {
// $plantId = $get('plant_id');
// if (! $plantId) {
// return [];
// }
// return GuardName::where('plant_id', $plantId)
// ->pluck('name', 'id')
// ->toArray();
// })
// ->required()
// ->reactive()
// ->default(function () {
// return optional(GuardPatrolEntry::where('created_by', Filament::auth()->user()?->name)->latest()->first())->guard_name_id;
// })
// ->disabled(fn (Get $get) => ! empty($get('id')))
// ->afterStateUpdated(function ($state, callable $set, callable $get) {
// $guardName = $get('guard_name_id');
// if (! $guardName) {
// $set('gPeGuardNameError', 'Please select a guard name first.');
// return;
// } else {
// $set('patrol_time', now()->format('Y-m-d H:i:s'));
// $set('updated_by', Filament::auth()->user()?->name);
// $set('gPeGuardNameError', null);
// }
// })
// ->extraAttributes(fn ($get) => [
// 'class' => $get('gPeGuardNameError') ? 'border-red-500' : '',
// ])
// ->hint(fn ($get) => $get('gPeGuardNameError') ? $get('gPeGuardNameError') : null)
// ->hintColor('danger'),
Forms\Components\TextInput::make('guard_name')
->label('Guard Name')
// ->relationship('guardNames', 'name')
->options(function (callable $get) {
$plantId = $get('plant_id');
if (! $plantId) {
return [];
}
->default(fn () => Filament::auth()->user()?->name)
->readOnly()
->dehydrated(),
return GuardName::where('plant_id', $plantId)
->pluck('name', 'id')
->toArray();
})
->required()
->reactive()
->default(function () {
return optional(GuardPatrolEntry::where('created_by', Filament::auth()->user()?->name)->latest()->first())->guard_name_id;
})
->disabled(fn (Get $get) => ! empty($get('id')))
->afterStateUpdated(function ($state, callable $set, callable $get) {
$guardName = $get('guard_name_id');
if (! $guardName) {
$set('gPeGuardNameError', 'Please select a guard name first.');
return;
} else {
$set('patrol_time', now()->format('Y-m-d H:i:s'));
$set('updated_by', Filament::auth()->user()?->name);
$set('gPeGuardNameError', null);
}
})
->extraAttributes(fn ($get) => [
'class' => $get('gPeGuardNameError') ? 'border-red-500' : '',
])
->hint(fn ($get) => $get('gPeGuardNameError') ? $get('gPeGuardNameError') : null)
->hintColor('danger'),
Forms\Components\Hidden::make('check_point_name')// TextInput
->label('Check Point Name')
->reactive()
@@ -123,50 +129,89 @@ class GuardPatrolEntryResource extends Resource
->extraAttributes([
'x-on:keydown.enter.prevent' => '$wire.processCheckPointName()',
]),
Forms\Components\Select::make('check_point_name_id')
->label('Check Point Name')
// ->relationship('checkPointNames', 'name')
->options(function (callable $get) {
$plantId = $get('plant_id');
if (! $plantId) {
return [];
}
// Forms\Components\Select::make('check_point_name_id')
// ->label('Check Point Name')
// // ->relationship('checkPointNames', 'name')
// ->options(function (callable $get) {
// $plantId = $get('plant_id');
// if (! $plantId) {
// return [];
// }
return CheckPointName::where('plant_id', $plantId)
->pluck('name', 'id')
->toArray();
})
// return CheckPointName::where('plant_id', $plantId)
// ->pluck('name', 'id')
// ->toArray();
// })
// ->required()
// ->reactive()
// // ->default(function () {
// // return optional(GuardPatrolEntry::where('created_by', Filament::auth()->user()?->name)->latest()->first())->check_point_name_id;
// // })
// ->disabled(fn (Get $get) => ! empty($get('id')))
// ->afterStateUpdated(function ($state, callable $set, callable $get) {
// $checkPointName = $get('check_point_name_id');
// if (! $checkPointName) {
// $set('check_point_name_id', null);
// $set('gPeCheckPointNameError', 'Please select a check point name first.');
// return;
// } else {
// $set('patrol_time', now()->format('Y-m-d H:i:s'));
// $set('updated_by', Filament::auth()->user()?->name);
// $set('gPeCheckPointNameError', null);
// }
// })
// ->extraAttributes(fn ($get) => [
// 'class' => $get('gPeCheckPointNameError') ? 'border-red-500' : '',
// ])
// ->hint(fn ($get) => $get('gPeCheckPointNameError') ? $get('gPeCheckPointNameError') : null)
// ->hintColor('danger')
// ->rule(function (callable $get) {
// return Rule::unique('guard_patrol_entries', 'check_point_name_id')
// ->where('guard_name_id', $get('guard_name_id'))
// ->where('patrol_time', now())
// ->where('plant_id', $get('plant_id'))
// ->ignore($get('id'));
// }),
Forms\Components\Hidden::make('check_point_name_id')
->dehydrated(true),
Forms\Components\TextInput::make('check_point_name')
->label('Check Point Name')
->required()
->autofocus()
->reactive()
// ->default(function () {
// return optional(GuardPatrolEntry::where('created_by', Filament::auth()->user()?->name)->latest()->first())->check_point_name_id;
// })
->disabled(fn (Get $get) => ! empty($get('id')))
->afterStateUpdated(function ($state, callable $set, callable $get) {
$checkPointName = $get('check_point_name_id');
if (! $checkPointName) {
if (blank($state)) {
$set('check_point_name_id', null);
$set('gPeCheckPointNameError', 'Please select a check point name first.');
$set('gPeCheckPointNameError', 'Please enter a check point name.');
return;
} else {
$set('patrol_time', now()->format('Y-m-d H:i:s'));
$set('updated_by', Filament::auth()->user()?->name);
$set('gPeCheckPointNameError', null);
}
$checkPoint = CheckPointName::where('plant_id', $get('plant_id'))
->whereRaw('LOWER(name) = ?', [strtolower(trim($state))])
->first();
if (! $checkPoint) {
$set('check_point_name_id', null);
$set('gPeCheckPointNameError', 'Invalid check point name.');
return;
}
$set('check_point_name_id', $checkPoint->id);
$set('patrol_time', now());
$set('updated_by', Filament::auth()->user()?->name);
$set('gPeCheckPointNameError', null);
})
->extraAttributes(fn ($get) => [
'class' => $get('gPeCheckPointNameError') ? 'border-red-500' : '',
])
->hint(fn ($get) => $get('gPeCheckPointNameError') ? $get('gPeCheckPointNameError') : null)
->hintColor('danger')
->rule(function (callable $get) {
return Rule::unique('guard_patrol_entries', 'check_point_name_id')
->where('guard_name_id', $get('guard_name_id'))
->where('patrol_time', now())
->where('plant_id', $get('plant_id'))
->ignore($get('id'));
}),
->hint(fn ($get) => $get('gPeCheckPointNameError'))
->hintColor('danger'),
Forms\Components\TextInput::make('reader_code')
->label('Reader Code')
->hidden(fn (Get $get) => ! $get('id'))
@@ -177,11 +222,11 @@ class GuardPatrolEntryResource extends Resource
}
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\DateTimePicker::make('patrol_time')
Forms\Components\Hidden::make('patrol_time')
->label('Patrol Time')
->reactive()
->default(fn () => now())
->readOnly(fn (Get $get) => ! $get('id'))
// ->readOnly(fn (Get $get) => ! $get('id'))
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('updated_by', Filament::auth()->user()?->name);
})

View File

@@ -3,6 +3,10 @@
namespace App\Filament\Resources\GuardPatrolEntryResource\Pages;
use App\Filament\Resources\GuardPatrolEntryResource;
use App\Models\CheckPointName;
use App\Models\CheckPointTime;
use App\Models\GuardName;
use App\Models\GuardPatrolEntry;
use Filament\Actions;
use Filament\Facades\Filament;
use Filament\Notifications\Notification;
@@ -29,6 +33,100 @@ class CreateGuardPatrolEntry extends CreateRecord
// public ?array $data = null;
protected function mutateFormDataBeforeCreate(array $data): array
{
$guardId = GuardName::where(
'name',
Filament::auth()->user()?->name
)->value('id');
if (! $guardId) {
Notification::make()
->title('Guard Name Not Matched')
->body('Logged-in user name was not found in Guard Name Master.')
->danger()
->send();
$this->halt();
}
$data['guard_name_id'] = $guardId;
$checkPoint = CheckPointName::where('plant_id', $data['plant_id'])
->where('name', trim($data['check_point_name']))
->value('id');
if (! $checkPoint) {
Notification::make()
->title('Invalid Check Point')
->body('The entered check point name does not exist.')
->danger()
->send();
$this->halt();
}
// $lastScan = GuardPatrolEntry::where('plant_id', $data['plant_id'])
// ->where('guard_name_id', $guardId)
// ->latest('id')
// ->first();
// if ($lastScan) {
// $previousPoint = $lastScan->check_point_name_id;
// $route = CheckPointTime::where('plant_id', $data['plant_id'])
// ->where('check_point1_id', $previousPoint)
// ->where('check_point2_id', $checkPoint->id)
// ->first();
// if (! $route) {
// Notification::make()
// ->title('Wrong Check Point Order')
// ->body('This checkpoint is not the next allowed point.')
// ->danger()
// ->send();
// $this->halt();
// }
// } else {
// // First scan must start from sequence 1
// $firstRoute = CheckPointTime::where('plant_id', $data['plant_id'])
// ->where('check_point2_id', $checkPoint->id)
// ->where('sequence_number', 1)
// ->first();
// if (! $firstRoute) {
// Notification::make()
// ->title('Invalid Starting Point')
// ->body('Patrol must start from the first checkpoint.')
// ->danger()
// ->send();
// $this->halt();
// }
// }
$data['check_point_name_id'] = $checkPoint;
unset($data['check_point_name']);
return $data;
}
public function processCheckPointName()
{

View File

@@ -24,6 +24,10 @@ use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Maatwebsite\Excel\Facades\Excel;
use Filament\Tables\Actions\ImportAction;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Select;
use Filament\Tables\Filters\Filter;
use Filament\Forms\Components\TextInput;
// use PhpOffice\PhpSpreadsheet\IOFactory;
class ImportTransitResource extends Resource
@@ -40,16 +44,16 @@ class ImportTransitResource extends Resource
->schema([
Forms\Components\TextInput::make('cri_rfq_number')
->label('CRI/RFQ Number')
->disabled(fn ($operation) => $operation == 'edit')
->unique(ignoreRecord: true),
->required()
->disabled(fn ($operation) => $operation == 'edit'),
Forms\Components\DatePicker::make('mail_received_date')
->label('Mail Received Date')
->required(),
Forms\Components\TextInput::make('pricol_ref_number')
->label('Pricol Ref Number')
->afterStateUpdated(function (callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
// Forms\Components\TextInput::make('pricol_ref_number')
// ->label('Ref Number')
// ->afterStateUpdated(function (callable $set) {
// $set('updated_by', Filament::auth()->user()?->name);
// }),
Forms\Components\TextInput::make('requester')
->label('Requester')
->afterStateUpdated(function (callable $set) {
@@ -75,7 +79,7 @@ class ImportTransitResource extends Resource
->afterStateUpdated(function (callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\DatePicker::make('inv_value')
Forms\Components\TextInput::make('inv_value')
->label('Inv Value')
->afterStateUpdated(function (callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
@@ -95,16 +99,8 @@ class ImportTransitResource extends Resource
->afterStateUpdated(function (callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\Select::make('status')
Forms\Components\TextInput::make('status')
->label('Status')
->options([
'Under Service Provider Finalization' => 'Under Service Provider Finalization',
'Yet to pick up' => 'Yet to pick up',
'Awaiting Vessel Loading' => 'Awaiting Vessel Loading',
'In Transit' => 'In Transit',
'Under Import Customs Clearance in Destination' => 'Under Import Customs Clearance in Destination',
'Delivered' => 'Delivered',
])
->reactive()
->afterStateUpdated(function (callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
@@ -184,8 +180,17 @@ class ImportTransitResource extends Resource
->afterStateUpdated(function (callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
Forms\Components\TextInput::make('remark')
Forms\Components\Select::make('remark')
->label('Remark')
->options([
'Under Service Provider Finalization' => 'Under Service Provider Finalization',
'Yet to pick up' => 'Yet to pick up',
'Awaiting Vessel Loading' => 'Awaiting Vessel Loading',
'In Transit' => 'In Transit',
'Under Import Customs Clearance in Destination' => 'Under Import Customs Clearance in Destination',
'Delivered' => 'Delivered',
])
->reactive()
->afterStateUpdated(function (callable $set) {
$set('updated_by', Filament::auth()->user()?->name);
}),
@@ -220,128 +225,158 @@ class ImportTransitResource extends Resource
}),
Tables\Columns\TextColumn::make('cri_rfq_number')
->label('CRI/RFQ Number')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('mail_received_date')
->label('Mail Received Date')
->searchable()
->date()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('pricol_ref_number')
->label('Pricol Ref Number')
->label('Ref Number')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('requester')
->label('Requester')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('shipper')
->label('Shipper')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('shipper_location')
->label('Shipper Location')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('shipper_invoice')
->label('Shipper Invoice')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('shipper_invoice_date')
->label('Shipper Invoice Date')
->searchable()
->date()
->formatStateUsing(fn ($state) => $state?->format('Y-m-d'))
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('inv_value')
->label('Inv Value')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('freight_charge')
->label('Freight Charge')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('customs_agent_name')
->label('Customs Agent Name')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('eta_date')
->label('ETA Date')
->searchable()
->date()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('status')
->label('Status')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('insurance_status')
->label('Insurance Status')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('delivery_location')
->label('Delivery Location')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('etd_date')
->label('ETD Date')
->searchable()
->date()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('mode')
->label('Mode')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('inco_terms')
->label('Inco Terms')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('port_of_loading')
->label('Port of Loading')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('port_of_discharge')
->label('Port of Discharge')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('delivery_city')
->label('Delivery City')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('packages')
->label('Packages')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('type_of_package')
->label('Type of Package')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('gross_weight')
->label('Gross Weight')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('volume')
->label('Volume')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('bill_number')
->label('Bill Number')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('bill_received_date')
->label('Bill Received Date')
->searchable()
->alignCenter()
->date()
->sortable(),
Tables\Columns\TextColumn::make('vessel_number')
->label('Vessel Number')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('remark')
->label('Remark')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('is_transit_identified')
->label('Is Transit Identified')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('created_at')
@@ -372,7 +407,100 @@ class ImportTransitResource extends Resource
])
->filters([
Tables\Filters\TrashedFilter::make(),
Filter::make('advanced_filters')
->label('Advanced Filters')
->form([
TextInput::make('cri_rfq_number')
->label('CRI RFQ Number')
->reactive()
->placeholder('Enter Rfq Number')
->afterStateUpdated(function ($state, callable $set, callable $get): void {
$set('created_from', null);
$set('created_to', null);
}),
TextInput::make('status')
->label('Status')
->reactive()
->placeholder('Enter Status')
->afterStateUpdated(function ($state, callable $set, callable $get): void {
$set('created_from', null);
$set('created_to', null);
}),
Select::make('is_transit_identified')
->label('Is Transit Identified')
->reactive()
->options([
0 => 0,
1 => 1,
])
->afterStateUpdated(function ($state, callable $set, callable $get): void {
$set('created_from', null);
$set('created_to', null);
}),
DateTimePicker::make(name: 'created_from')
->label('Created From')
->placeholder(placeholder: 'Select From DateTime')
->reactive()
->native(false),
DateTimePicker::make('created_to')
->label('Created To')
->placeholder(placeholder: 'Select To DateTime')
->reactive()
->native(false),
])
->query(function ($query, array $data) {
// Hide all records initially if no filters are applied
if (empty($data['cri_rfq_number']) && empty($data['status']) && ! isset($data['is_transit_identified']) && empty($data['created_from']) && empty($data['created_to'])) {
return $query;
}
if (! empty($data['cri_rfq_number'])) {
$query->where('cri_rfq_number', 'like', '%'.$data['cri_rfq_number'].'%');
}
if (! empty($data['status'])) {
$query->where('status', 'like', '%'.$data['status'].'%');
}
if (isset($data['is_transit_identified'])) {
$query->where('is_transit_identified', $data['is_transit_identified']);
}
if (! empty($data['created_from'])) {
$query->where('created_at', '>=', $data['created_from']);
}
if (! empty($data['created_to'])) {
$query->where('created_at', '<=', $data['created_to']);
}
})
->indicateUsing(function (array $data) {
$indicators = [];
if (! empty($data['cri_rfq_number'])) {
$indicators[] = 'CRI Rfq Number: '.$data['cri_rfq_number'];
}
if (! empty($data['status'])) {
$indicators[] = 'Status: '.$data['status'];
}
if (isset($data['is_transit_identified'])) {
$indicators[] = 'Is Transit Identified: '.$data['is_transit_identified'];
}
if (! empty($data['created_from'])) {
$indicators[] = 'From: '.$data['created_from'];
}
if (! empty($data['created_to'])) {
$indicators[] = 'To: '.$data['created_to'];
}
return $indicators;
}),
])
->filtersFormMaxHeight('280px')
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),

File diff suppressed because it is too large Load Diff

View File

@@ -611,6 +611,7 @@ class CreateInvoiceValidation extends CreateRecord
'sticker_master_id' => $sticker->id,
'plant_id' => $plantId,
'invoice_number' => $invoiceNumber,
'invoice_quantity' => 1,
'quantity' => 1,
'operator_id' => $operatorName,
'created_by' => $operatorName,
@@ -653,6 +654,7 @@ class CreateInvoiceValidation extends CreateRecord
'sticker_master_id' => $sticker->id,
'plant_id' => $plantId,
'invoice_number' => $invoiceNumber,
'invoice_quantity' => $bundleQty,
'quantity' => $bundleQty,
'operator_id' => $operatorName,
'created_by' => $operatorName,
@@ -697,11 +699,13 @@ class CreateInvoiceValidation extends CreateRecord
// 8 = 3 + 5 // 8 = 5 + 3 // 8 = 0 + 8 // 8 = 8 + 0
// 8 = 3 + 5 // 8 = 5 + 3 // 8 = 0 + 8 // 8 = 8 + 0
// 0 = 0 + 0
// 4 = 1.5 + 2.5
$existQty = $existEmpQty + $existComQty;
// 8 <= 11 // 8 <= 8 // 8 <= 11 // 8 <= 9
// 8 <= 7 // 8 <= 7 // 8 <= 7 // 8 <= 7
// 0 <= 5
// 4 <= 2
if ($existQty <= $totalExcelQty) {
// 6 = 11 - 5 // 5 = 8 - 3 // 3 = 11 - 8 // 9 = 9 - 0
@@ -723,29 +727,46 @@ class CreateInvoiceValidation extends CreateRecord
'updated_by' => $operatorName,
'updated_at' => now(),
]);
InvoiceValidation::where('invoice_number', $invoiceNumber)->where('plant_id', $plantId)->where('sticker_master_id', $sticker->id)
->update([
'invoice_quantity' => $totalExcelQty,
]);
$newQuan--;
$inserted++;
} elseif ($newInsQty > 0) { // if ($sticker) // create
InvoiceValidation::where('invoice_number', $invoiceNumber)->where('plant_id', $plantId)->where('sticker_master_id', $sticker->id)
->update([
'invoice_quantity' => $totalExcelQty,
]);
InvoiceValidation::create([
'sticker_master_id' => $sticker->id,
'plant_id' => $plantId,
'invoice_number' => $invoiceNumber,
'invoice_quantity' => $totalExcelQty,
'quantity' => $newInsQty,
'operator_id' => $operatorName,
'created_by' => $operatorName,
'updated_by' => $operatorName,
]);
$inserted++;
}
}
// 8 > 7 // 8 > 7 // 8 > 7 // 8 > 7
// 4 > 2
else {
// 2 = 7 - 5 // 4 = 7 - 3 // -1 = 7 - 8 // 7 = 7 - 0
// -0.5 = 2 - 2.5 //
$newInsQty = $totalExcelQty - $existComQty;
// 3 > 0 // 5 > 0 // 0 > 0 // 8 > 0
if ($existEmpQty > 0) { // update
// 1.5 > 0 //
if ($newInsQty > 0 && $existEmpQty > 0) { // update
// 3 = 2 // 5 = 4 // 0 = -1 // 8 = 7
// 1.5 == -0.5 //
if ($existEmpQty == $newInsQty) {
continue;
}
@@ -756,6 +777,12 @@ class CreateInvoiceValidation extends CreateRecord
'updated_by' => $operatorName,
'updated_at' => now(),
]);
InvoiceValidation::where('invoice_number', $invoiceNumber)->where('plant_id', $plantId)->where('sticker_master_id', $sticker->id)
->update([
'invoice_quantity' => $totalExcelQty,
]);
$newQuan--;
$inserted++;
} elseif ($newInsQty > 0) { // create
@@ -763,11 +790,18 @@ class CreateInvoiceValidation extends CreateRecord
'sticker_master_id' => $sticker->id,
'plant_id' => $plantId,
'invoice_number' => $invoiceNumber,
'invoice_quantity' => $totalExcelQty,
'quantity' => $newInsQty,
'operator_id' => $operatorName,
'created_by' => $operatorName,
'updated_by' => $operatorName,
]);
InvoiceValidation::where('invoice_number', $invoiceNumber)->where('plant_id', $plantId)->where('sticker_master_id', $sticker->id)
->update([
'invoice_quantity' => $totalExcelQty,
]);
$inserted++;
}
}
@@ -1791,6 +1825,7 @@ class CreateInvoiceValidation extends CreateRecord
'sticker_master_id' => $sticker->id,
'plant_id' => $plantId,
'invoice_number' => $invoiceNumber,
'invoice_quantity' => 1,
'quantity' => 1,
'operator_id' => $operatorName,
'created_by' => $operatorName,
@@ -1826,6 +1861,7 @@ class CreateInvoiceValidation extends CreateRecord
'sticker_master_id' => $sticker->id,
'plant_id' => $plantId,
'invoice_number' => $invoiceNumber,
'invoice_quantity' => $bundleQty,
'quantity' => $bundleQty,
'operator_id' => $operatorName,
'created_by' => $operatorName,
@@ -1859,6 +1895,7 @@ class CreateInvoiceValidation extends CreateRecord
'sticker_master_id' => $sticker->id,
'plant_id' => $plantId,
'invoice_number' => $invoiceNumber,
'invoice_quantity' => $totalExcelQty,
'quantity' => $totalExcelQty,
'operator_id' => $operatorName,
'created_by' => $operatorName,
@@ -3347,6 +3384,7 @@ class CreateInvoiceValidation extends CreateRecord
$createdDt = $record->created_at;
$stickMasterId = $record->sticker_master_id;
$curExistQty = $record->quantity;
$curItemInvQty = $record->invoice_quantity;
// $curScanQty = 2;
if ($curExistQty > $curScanQty) { // 5 > 2
@@ -3362,6 +3400,7 @@ class CreateInvoiceValidation extends CreateRecord
'invoice_number' => $invoiceNumber,
'serial_number' => $serialNumber,
'batch_number' => $batchNumber,
'invoice_quantity' => $curItemInvQty,
'quantity' => $curScanQty,
'created_at' => $createdDt,
'operator_id' => $operatorName,
@@ -3545,6 +3584,7 @@ class CreateInvoiceValidation extends CreateRecord
$this->dispatch('refreshInvoiceData', invoiceNumber: $invoiceNumber, plantId: $plantId, onCapFocus: false);
}
// TN01/BOX22/SERIAL999 >> PANEL BOX QR
// /^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/
if (! preg_match('/^([a-zA-Z0-9]{6,})\|([1-9][a-zA-Z0-9]{8,})(?:\/[MmPpCc])?\|?$/', $serNo, $matches)) {
Notification::make()

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
<?php
namespace App\Filament\Resources\ItemCharacteristicResource\Pages;
use App\Filament\Resources\ItemCharacteristicResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateItemCharacteristic extends CreateRecord
{
protected static string $resource = ItemCharacteristicResource::class;
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Filament\Resources\ItemCharacteristicResource\Pages;
use App\Filament\Resources\ItemCharacteristicResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditItemCharacteristic extends EditRecord
{
protected static string $resource = ItemCharacteristicResource::class;
protected function getHeaderActions(): array
{
return [
Actions\ViewAction::make(),
Actions\DeleteAction::make(),
Actions\ForceDeleteAction::make(),
Actions\RestoreAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\ItemCharacteristicResource\Pages;
use App\Filament\Resources\ItemCharacteristicResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListItemCharacteristics extends ListRecords
{
protected static string $resource = ItemCharacteristicResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\ItemCharacteristicResource\Pages;
use App\Filament\Resources\ItemCharacteristicResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
class ViewItemCharacteristic extends ViewRecord
{
protected static string $resource = ItemCharacteristicResource::class;
protected function getHeaderActions(): array
{
return [
Actions\EditAction::make(),
];
}
}

View File

@@ -6,6 +6,7 @@ use App\Filament\Exports\LineExporter;
use App\Filament\Imports\LineImporter;
use App\Filament\Resources\LineResource\Pages;
use App\Models\Block;
use App\Models\Item;
use App\Models\Line;
use App\Models\Plant;
use App\Models\WorkGroupMaster;
@@ -24,6 +25,11 @@ use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\Unique;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Tables\Filters\Filter;
class LineResource extends Resource
{
@@ -1184,7 +1190,207 @@ class LineResource extends Resource
])
->filters([
Tables\Filters\TrashedFilter::make(),
Filter::make('advanced_filters')
->label('Advanced Filters')
->form([
Select::make('Plant')
->label('Search by Plant Name')
->nullable()
->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id;
// return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
if ($userHas && strlen($userHas) > 0) {
return Plant::where('id', $userHas)->pluck('name', 'id')->toArray();
} else {
return Plant::whereHas('items', function ($query) {
$query->whereNotNull('id');
})->orderBy('code')->pluck('name', 'id')->toArray();
}
})
->searchable()
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get): void {
$set('code', null);
$set('operator_id', null);
}),
Select::make('name')
->label('Search by Line Name')
->nullable()
->options(function (callable $get) {
$plantId = $get('Plant');
return $plantId ? Line::where('plant_id', $plantId)->pluck('name', 'id') : [];
})
->searchable()
->reactive(),
Select::make('type')
->label('Search by Line Type')
->nullable()
->options(function (callable $get) {
$plantId = $get('Plant');
return $plantId ? Line::where('plant_id', $plantId)->distinct()->pluck('type', 'type')->toArray(): [];
})
->searchable()
->reactive(),
Select::make('work_group_id')
->label('Search by WorkGroupCenter')
->nullable()
->options(function (callable $get) {
$plantId = $get('Plant');
$workGroupIds = Line::where('plant_id', $plantId)
->get([
'work_group1_id',
'work_group2_id',
'work_group3_id',
'work_group4_id',
'work_group5_id',
'work_group6_id',
'work_group7_id',
'work_group8_id',
'work_group9_id',
'work_group10_id',
])
->flatMap(function ($line) {
return [
$line->work_group1_id,
$line->work_group2_id,
$line->work_group3_id,
$line->work_group4_id,
$line->work_group5_id,
$line->work_group6_id,
$line->work_group7_id,
$line->work_group8_id,
$line->work_group9_id,
$line->work_group10_id,
];
})
->filter()
->unique()
->values()
->toArray();
return WorkGroupMaster::whereIn('id', $workGroupIds)
->pluck('name', 'id')
->toArray();
})
->searchable()
->reactive(),
DateTimePicker::make(name: 'created_from')
->label('Created From')
->placeholder(placeholder: 'Select From DateTime')
->reactive()
->native(false),
DateTimePicker::make('created_to')
->label('Created To')
->placeholder(placeholder: 'Select To DateTime')
->reactive()
->native(false),
])
->query(function ($query, array $data) {
// Hide all records initially if no filters are applied
if (empty($data['Plant']) && empty($data['name']) && empty($data['type']) && empty($data['work_group_id']) && empty($data['created_from']) && empty($data['created_to']) && empty($data['updated_from']) && empty($data['updated_to'])) {
// return $query->whereRaw('1 = 0');
}
if (! empty($data['Plant'])) { // $plant = $data['Plant'] ?? null
$query->where('plant_id', $data['Plant']);
} else {
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return $query->whereRaw('1 = 0');
}
}
if (! empty($data['name'])) {
$query->where('id', $data['name']);
}
if (! empty($data['type'])) {
$query->where('type', $data['type']);
}
// if (! empty($data['work_group_id'])) {
// $query->where('name', $data['work_group_id']);
// }
if (! empty($data['work_group_id'])) {
$query->where(function ($q) use ($data) {
$q->where('work_group1_id', $data['work_group_id'])
->orWhere('work_group2_id', $data['work_group_id'])
->orWhere('work_group3_id', $data['work_group_id'])
->orWhere('work_group4_id', $data['work_group_id'])
->orWhere('work_group5_id', $data['work_group_id'])
->orWhere('work_group6_id', $data['work_group_id'])
->orWhere('work_group7_id', $data['work_group_id'])
->orWhere('work_group8_id', $data['work_group_id'])
->orWhere('work_group9_id', $data['work_group_id'])
->orWhere('work_group10_id', $data['work_group_id']);
});
}
if (! empty($data['created_from'])) {
$query->where('created_at', '>=', $data['created_from']);
}
if (! empty($data['created_to'])) {
$query->where('created_at', '<=', $data['created_to']);
}
})
->indicateUsing(function (array $data) {
$indicators = [];
if (! empty($data['Plant'])) {
$indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
} else {
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return 'Plant: Choose plant to filter records.';
}
}
if (! empty($data['name'])) {
$indicators[] = 'Line Name: '.Line::where('id', $data['name'])->value('name');
}
if (! empty($data['type'])) {
$indicators[] = 'Line Type: '.Line::where('type', $data['type'])->value('type');
}
if (! empty($data['work_group_id'])) {
$indicators[] = 'Work Group: ' .
WorkGroupMaster::where('id', $data['work_group_id'])->value('name');
}
if (! empty($data['created_from'])) {
$indicators[] = 'From: '.$data['created_from'];
}
if (! empty($data['created_to'])) {
$indicators[] = 'To: '.$data['created_to'];
}
if (! empty($data['updated_from'])) {
$indicators[] = 'From: '.$data['updated_from'];
}
if (! empty($data['updated_to'])) {
$indicators[] = 'To: '.$data['updated_to'];
}
return $indicators;
}),
])
->filtersFormMaxHeight('280px')
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),

View File

@@ -11,13 +11,17 @@ use App\Models\Plant;
use App\Models\WorkGroupMaster;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
use Filament\Tables\Filters\Filter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
@@ -66,6 +70,8 @@ class MachineResource extends Resource
return;
} else {
$set('mPlantError', null);
$set('line_id', null);
$set('work_group_master_id', null);
}
})
->extraAttributes(fn ($get) => [
@@ -107,6 +113,7 @@ class MachineResource extends Resource
// return;
// }
$set('mLineError', null);
$set('work_group_master_id', null);
}
})
->extraAttributes(fn ($get) => [
@@ -249,7 +256,177 @@ class MachineResource extends Resource
])
->filters([
Tables\Filters\TrashedFilter::make(),
Filter::make('advanced_filters')
->label('Advanced Filters')
->form([
Select::make('Plant')
->label('Search by Plant Name')
->nullable()
->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id;
// return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
if ($userHas && strlen($userHas) > 0) {
return Plant::where('id', $userHas)->pluck('name', 'id')->toArray();
} else {
return Plant::whereHas('machines', function ($query) {
$query->whereNotNull('id');
})->orderBy('code')->pluck('name', 'id')->toArray();
}
})
->searchable()
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get): void {
$set('code', null);
$set('operator_id', null);
}),
Select::make('Line')
->label('Search by Line')
->searchable()
->options(function (callable $get) {
$plantId = $get('Plant');
if (empty($plantId)) {
return [];
}
return Line::whereHas('machines', function ($query) use ($plantId) {
if ($plantId) {
$query->where('plant_id', $plantId);
}
})->pluck('name', 'id');
})
->searchable()
->reactive(),
TextInput::make('name')
->label('Description')
->reactive(),
Select::make('work_group_master')
->label('Search by Work Group Center')
->options(function (callable $get) {
$plantId = $get('Plant');
return WorkGroupMaster::whereHas('machines', function ($query) use ($plantId) {
if ($plantId) {
$query->where('plant_id', $plantId);
}
})
->pluck('name', 'id')
->toArray();
})
->searchable()
->reactive(),
Select::make('work_center')
->label('Search by Work Center')
->options(function (callable $get) {
$plantId = $get('Plant');
$workGroupMasterId = $get('work_group_master');
if (! $workGroupMasterId) {
return [];
}
return Machine::query()
->when($plantId, fn ($q) => $q->where('plant_id', $plantId))
->where('work_group_master_id', $workGroupMasterId)
->pluck('work_center', 'work_center')
->toArray();
})
->searchable()
->reactive(),
DateTimePicker::make(name: 'created_from')
->label('Created From')
->placeholder(placeholder: 'Select From DateTime')
->reactive()
->native(false),
DateTimePicker::make('created_to')
->label('Created To')
->placeholder(placeholder: 'Select To DateTime')
->reactive()
->native(false),
])
->query(function ($query, array $data) {
// Hide all records initially if no filters are applied
if (empty($data['Plant']) && empty($data['Line']) && empty($data['name']) && empty($data['work_group_master']) && empty($data['created_from']) && empty($data['created_to']) && empty($data['updated_from']) && empty($data['updated_to'])) {
// return $query->whereRaw('1 = 0');
}
if (! empty($data['Plant'])) { // $plant = $data['Plant'] ?? null
$query->where('plant_id', $data['Plant']);
} else {
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return $query->whereRaw('1 = 0');
}
}
if (! empty($data['Line'])) {
$query->where('line_id', $data['Line']);
}
if (! empty($data['name'])) {
$query->where('name', $data['name']);
}
if (! empty($data['work_group_master'])) {
$query->where('work_group_master_id', $data['work_group_master']);
}
if (! empty($data['work_center'])) {
$query->where('work_center', $data['work_center']);
}
if (! empty($data['created_from'])) {
$query->where('created_at', '>=', $data['created_from']);
}
if (! empty($data['created_to'])) {
$query->where('created_at', '<=', $data['created_to']);
}
})
->indicateUsing(function (array $data) {
$indicators = [];
if (! empty($data['Plant'])) {
$indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
} else {
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return 'Plant: Choose plant to filter records.';
}
}
if (! empty($data['Line'])) {
$indicators[] = 'Line Name: '.Line::where('id', $data['Line'])->value('name');
}
if (! empty($data['name'])) {
$indicators[] = 'Description: '.$data['name'];
}
if (! empty($data['work_group_master'])) {
$indicators[] = 'Work Group Center: '.WorkGroupMaster::where('id', $data['work_group_master'])->value('name');
}
if (! empty($data['work_center'])) {
$indicators[] = 'Work Center: '.Machine::where('work_center', $data['work_center'])->value('work_center');
}
if (! empty($data['created_from'])) {
$indicators[] = 'From: '.$data['created_from'];
}
if (! empty($data['created_to'])) {
$indicators[] = 'To: '.$data['created_to'];
}
return $indicators;
}),
])
->filtersFormMaxHeight('280px')
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),

View File

@@ -146,21 +146,22 @@ class OcrValidationResource extends Resource
// $fullPath = storage_path('app/' . $storedPath);
$fullPath = storage_path('app/private/'.$storedPath);
$parser = new Parser;
// $pdf = $parser->parseContent(file_get_contents($uploaded->getRealPath()));
$pdf = $parser->parseContent(file_get_contents($uploaded->getRealPath()));
$pdf = $parser->parseFile($fullPath);
$text = $pdf->getText();
// dd($text);
// dd($text);
$item1 = null;
$item2 = null;
if (preg_match('/Item code\s*:\s*(\S+)/i', $text, $matches)) {
$item1 = $matches[1];
} elseif (preg_match('/E CODE\s*:\s*(\S+)/i', $text, $matches)) {
$item2 = $matches[1];
}
// if (preg_match('/Item code\s*:\s*(\S+)/i', $text, $matches)) {
// $item1 = $matches[1];
// }
// // elseif (preg_match('/E CODE\s*:\s*(\S+)/i', $text, $matches)) {
// else if (preg_match('/(?:Item\s*code|E[-\s]*CODE)\s*:\s*(\S+)/i', $text, $matches)) {
// $item2 = $matches[1];
// }
// dd($item2);
$processOrder = $get('gr_number');
@@ -194,36 +195,45 @@ class OcrValidationResource extends Resource
'local'
);
if ($itemCode == $item1) {
Notification::make()
Notification::make()
->title('Success')
->body("Gr Number '$processOrder' PDF uploaded successfully.")
->success()
->send();
return;
}
if ($itemCode == $item2) {
Notification::make()
->title('Success')
->body("Gr Number '$processOrder' PDF uploaded successfully.")
->success()
->send();
return;
} else {
Notification::make()
->title('Item Code not matched')
->body("Item Code: {$item->code} not matched with the uploaded pdf code $item1.")
->danger()
->send();
// if ($itemCode == $item1) {
// Notification::make()
// ->title('Success')
// ->body("Gr Number '$processOrder' PDF uploaded successfully.")
// ->success()
// ->send();
if (Storage::disk('local')->exists($storedPath)) {
Storage::disk('local')->delete($storedPath);
}
// return;
// }
// if ($itemCode == $item2) {
// Notification::make()
// ->title('Success')
// ->body("Gr Number '$processOrder' PDF uploaded successfully.")
// ->success()
// ->send();
return;
}
// return;
// }
// else {
// Notification::make()
// ->title('Item Code not matched')
// ->body("Item Code: {$item->code} not matched with the uploaded pdf code $item2.")
// ->danger()
// ->send();
// if (Storage::disk('local')->exists($storedPath)) {
// Storage::disk('local')->delete($storedPath);
// }
// return;
// }
}
} else {
Notification::make()

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,283 @@
<?php
namespace App\Filament\Resources\PanelBoxValidationResource\Pages;
use App\Filament\Resources\PanelBoxValidationResource;
use App\Models\ProductCharacteristicsMaster;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
use Illuminate\Validation\ValidationException;
class CreatePanelBoxValidation extends CreateRecord {
protected static string $resource = PanelBoxValidationResource::class;
public $showChecklist = false;
public $checklist;
public $skipChecklistValidation = false;
public bool $shouldSkipChecklist = false;
public $existingRecords = [];
protected $listeners = [
'checklistUpdated' => 'setChecklist',
'checklist-cancelled' => 'handleChecklistCancel',
'checklist-saved' => 'checkListSaved',
];
public function setChecklist($checklist)
{
$this->data['checklist'] = $checklist;
}
public function doCreate()
{
$this->create();
}
public function mount(): void
{
parent::mount();
session()->forget([
'last_selected_plant_id',
'last_selected_line',
'last_selected_production',
'last_selected_inspection',
]);
}
public function handleChecklistCancel()
{
$this->skipChecklistValidation = true;
$this->showChecklist = false;
}
protected function mutateFormDataBeforeCreate(array $data): array
{
// if ($this->shouldSkipChecklist) {
// return $data;
// }
if ($this->checkIfHasCharacteristics($data)) {
$this->showChecklist = true;
$this->halt();
}
else{
\Filament\Notifications\Notification::make()
->title('Characteristics not found for the scanned item.')
->danger()
->send();
$this->halt();
}
}
protected function checkIfHasCharacteristics(array $data)
{
$plantId = $data['plant_id'] ?? null;
$itemCode = $data['item_id'] ?? null;
$lineId = $data['line_id'] ?? null;
if (!$plantId || !$itemCode || !$lineId) {
return false;
}
$item = \App\Models\Item::where('code', $itemCode)
->where('plant_id', $plantId)
->first();
$categoryName = trim($item->category) ?? null;
if (!$item) {
$this->existingRecords = collect();
return false;
}
$this->existingRecords = ProductCharacteristicsMaster::where('plant_id', $plantId)
->where('item_id', $item->id)
->where('line_id', $lineId)
->orderBy('id', 'asc')
->get();
return $this->existingRecords->isNotEmpty();
}
public function checkListSaved()
{
$this->showChecklist = false;
$plantId = $this->data['plant_id'] ?? null;
$lineId = $this->data['line_id'] ?? null;
$productionOrder = $this->data['production_order'] ?? null;
return redirect()->to(
static::getResource()::getUrl('create', [
'plant_id' => $this->data['plant_id'] ?? null,
'line_id' => $this->data['line_id'] ?? null,
'production_order' => $this->data['production_order'] ?? null,
'inspection_lot_number' => $this->data['inspection_lot_number'] ?? null,
])
);
}
protected function beforeCreate(): void
{
$errors = [];
if (!empty($this->data['validationError'])) {
$errors['validationError'] = ['Fix the errors before submitting.'];
}
if (!empty($this->data['serialPanelError'])) {
$errors['serialPanelError'] = ['Fix the errors before submitting.'];
}
if (!empty($this->data['packSlipPanelError'])) {
$errors['packSlipPanelError'] = ['Fix the errors before submitting.'];
}
if (!empty($this->data['namePlatePanelError'])) {
$errors['namePlatePanelError'] = ['Fix the errors before submitting.'];
}
//..name plate
if (!empty($this->data['tubeStickerPanelError'])) {
$errors['tubeStickerPanelError'] = ['Fix the errors before submitting.'];
}
if (!empty($this->data['warrantyCardPanelError'])) {
$errors['warrantyCardPanelError'] = ['Fix the errors before submitting.'];
}
//..part validations
if (!empty($this->data['part_validation1_error'])) {
$errors['part_validation1_error'] = ['Fix the errors before submitting.'];
}
if (!empty($this->data['part_validation2_error'])) {
$errors['part_validation2_error'] = ['Fix the errors before submitting.'];
}
if (!empty($this->data['part_validation3_error'])) {
$errors['part_validation3_error'] = ['Fix the errors before submitting.'];
}
if (!empty($this->data['part_validation4_error'])) {
$errors['part_validation4_error'] = ['Fix the errors before submitting.'];
}
if (!empty($this->data['part_validation5_error'])) {
$errors['part_validation5_error'] = ['Fix the errors before submitting.'];
}
if (!empty($errors)) {
throw ValidationException::withMessages($errors);
}
$this->checkExisting();
$checklist = $this->data['data']['checklist'] ?? [];
if (count($this->existingRecords) > 0){
$this->showChecklist = true;
$this->halt();
}
else{
$this->showChecklist = false;
}
}
public function checkExisting()
{
$plant_id = $this->data['plant_id'] ?? null;
$item_code = $this->data['item_id'] ?? null;
$line_id = $this->data['line_id'] ?? null;
$item = \App\Models\Item::where('code', $item_code)->where('plant_id', $plant_id)->first();
if (!$item) {
$this->existingRecords = collect();
return;
}
// $item_id = $item->id;
$categoryName = trim($item->category) ?? null;
$this->existingRecords = ProductCharacteristicsMaster::where('plant_id', $plant_id)
->where('category', $categoryName)
->where('line_id', $line_id)
->get();
}
protected function afterCreate(): void
{
// Get the value from the hidden field 'plant'
$plant = $this->form->getState()['plant'] ?? null;
$line = $this->form->getState()['line'] ?? null;
$production = $this->form->getState()['production'] ?? null;
$inspection = $this->form->getState()['inspection'] ?? null;
// $this->skipChecklistValidation = false;
// $this->showChecklist = false;
// $this->checklist = [];
// $this->form->fill();
// reset checklist
$this->checklist = [];
$this->skipChecklistValidation = false;
$this->showChecklist = false;
$this->form->fill([]);
$this->data = [];
$this->resetValidation();
$this->resetErrorBag();
$this->form->fill([
'plant_id' => null,
'line_id' => null,
'production_order' => null,
'inspection_lot_number' => null,
]);
// $this->dispatch('focus-item-id');
session()->flash('focus_item_id_after_redirect', true);
logger('Focus flag set in session');
if ($plant) {
session(['last_selected_plant_id' => $plant]);
}
if ($line) {
session(['last_selected_line' => $line]);
}
if ($production) {
session(['last_selected_production' => $production]);
}
if ($inspection) {
session(['last_selected_inspection' => $inspection]);
}
}
protected function getRedirectUrl(): string
{
//return $this->getResource()::getUrl('create'); // Stay on Create Page after savin
return $this->getResource()::getUrl('create', [
'plant_id' => $this->data['plant_id'] ?? null,
'line_id' => $this->data['line_id'] ?? null,
'production_order' => $this->data['production_order'] ?? null,
'inspection_lot_number' => $this->data['inspection_lot_number'] ?? null,
]);
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Filament\Resources\PanelBoxValidationResource\Pages;
use App\Filament\Resources\PanelBoxValidationResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditPanelBoxValidation extends EditRecord
{
protected static string $resource = PanelBoxValidationResource::class;
protected function getHeaderActions(): array
{
return [
Actions\ViewAction::make(),
Actions\DeleteAction::make(),
Actions\ForceDeleteAction::make(),
Actions\RestoreAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\PanelBoxValidationResource\Pages;
use App\Filament\Resources\PanelBoxValidationResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListPanelBoxValidations extends ListRecords
{
protected static string $resource = PanelBoxValidationResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Filament\Resources\PanelBoxValidationResource\Pages;
use App\Filament\Resources\PanelBoxValidationResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
class ViewPanelBoxValidation extends ViewRecord
{
protected static string $resource = PanelBoxValidationResource::class;
public bool $showChecklist = false;
protected function getHeaderActions(): array
{
return [
Actions\EditAction::make(),
];
}
}

View File

@@ -0,0 +1,371 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Exports\PanelGrMasterExporter;
use App\Filament\Imports\PanelGrMasterImporter;
use App\Filament\Resources\PanelGrMasterResource\Pages;
use App\Filament\Resources\PanelGrMasterResource\RelationManagers;
use App\Models\Item;
use App\Models\PalletValidation;
use App\Models\PanelGrMaster;
use App\Models\Plant;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
use Filament\Tables\Filters\Filter;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Closure;
class PanelGrMasterResource extends Resource
{
protected static ?string $model = PanelGrMaster::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Panel Box';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\Select::make('plant_id')
->label('Plant')
->reactive()
->searchable()
->relationship('plant', 'name')
->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id;
return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
})
->afterStateUpdated(function (callable $set) {
$set('item_id', null);
$set('document_number', null);
$set('invoice_number', null);
$set('supplier_number', null);
$set('quantity', '1');
})
->required(),
Forms\Components\Select::make('item_id')
->label('Item Code')
->reactive()
->searchable()
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return Item::where('plant_id', $plantId)->pluck('code', 'id');
})
->afterStateUpdated(function (callable $set) {
$set('document_number', null);
$set('invoice_number', null);
$set('supplier_number', null);
$set('quantity', '1');
})
->required(),
Forms\Components\TextInput::make('document_number')
->label('Document Number')
->required(),
Forms\Components\TextInput::make('invoice_number')
->label('Invoice Number')
->required(),
Forms\Components\TextInput::make('supplier_number')
->label('Supplier Number')
->required(),
Forms\Components\TextInput::make('inspection_lot_number')
->label('Inspection Lot Number')
->required(),
Forms\Components\TextInput::make('quantity')
->label('Quantity')
->numeric()
->default(1)
->minValue(1)
->reactive()
->required()
->afterStateUpdated(function (callable $set, $state) {
if ((float) $state == 0) {
$set('quantity', null);
}
}),
Forms\Components\Hidden::make('created_by')
->label('Created By')
->default(Filament::auth()->user()?->name),
Forms\Components\Hidden::make('updated_by')
->label('Updated By')
->default(Filament::auth()->user()?->name),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('No.')
->label('No.')
->getStateUsing(function ($record, $livewire, $column, $rowLoop) {
$paginator = $livewire->getTableRecords();
$perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10;
$currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1;
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}),
Tables\Columns\TextColumn::make('plant.name')
->label('Plant Name')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('item.code')
->label('Item Code')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('document_number')
->label('Document Number')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('invoice_number')
->label('Invoice Number')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('supplier_number')
->label('Supplier Number')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('inspection_lot_number')
->label('Inspection Lot Number')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('quantity')
->label('Quantity')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('created_at')
->dateTime()
->alignCenter()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('updated_at')
->dateTime()
->alignCenter()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('deleted_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
Tables\Filters\TrashedFilter::make(),
Filter::make('advanced_filters')
->label('Advanced Filters')
->form([
Select::make('Plant')
->label('Select Plant')
->nullable()
->options(function (callable $get) {
$userHas = Filament::auth()->user()->plant_id;
return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::orderBy('code')->pluck('name', 'id')->toArray();
})
->reactive()
->afterStateUpdated(function ($state, callable $set, callable $get): void {
$set('scanned_by', null);
}),
Select::make('item')
->label('Search by Item Code')
->nullable()
->searchable()
->reactive()
->options(function (callable $get) {
$plantId = $get('Plant');
if (empty($plantId)) {
return [];
}
return Item::whereHas('panelGrMasters', function ($query) use ($plantId) {
if ($plantId) {
$query->where('plant_id', $plantId);
}
})->pluck('code', 'id');
})
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('process_order', null);
}),
TextInput::make('document_number')
->label('Document Number')
->reactive()
->placeholder('Enter Document Number')
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('Rework', null);
}),
TextInput::make('invoice_number')
->label('Invoice Number')
->reactive()
->placeholder('Enter Invoice Number')
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('Rework', null);
}),
TextInput::make('supplier_number')
->label('Supplier Number')
->reactive()
->placeholder('Enter Supplier Number')
->afterStateUpdated(function ($state, callable $set, callable $get) {
$set('Rework', null);
}),
DateTimePicker::make(name: 'created_from')
->label('Created From')
->placeholder(placeholder: 'Select From DateTime')
->reactive()
->native(false),
DateTimePicker::make('created_to')
->label('Created To')
->placeholder(placeholder: 'Select To DateTime')
->reactive()
->native(false),
])
->query(function ($query, array $data) {
// Hide all records initially if no filters are applied
if (empty($data['Plant']) && empty($data['document_number']) && empty($data['invoice_number']) && empty($data['supplier_number']) && empty($data['created_from']) && empty($data['created_to']) && empty($data['created_by'])) {
return $query->whereRaw('1 = 0');
}
if (! empty($data['Plant'])) { // $plant = $data['Plant'] ?? null
$query->where('plant_id', $data['Plant']);
} else {
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return $query->whereRaw('1 = 0');
}
}
if (! empty($data['document_number'])) {
$query->where('document_number', 'like', '%' . $data['document_number'] . '%');
}
if (! empty($data['invoice_number'])) {
$query->where('invoice_number', 'like', '%' . $data['invoice_number'] . '%');
}
if (! empty($data['supplier_number'])) {
$query->where('supplier_number', 'like', '%' . $data['supplier_number'] . '%');
}
if (! empty($data['created_from'])) {
$query->where('created_at', '>=', $data['created_from']);
}
if (! empty($data['created_to'])) {
$query->where('created_at', '<=', $data['created_to']);
}
})
->indicateUsing(function (array $data) {
$indicators = [];
if (! empty($data['Plant'])) {
$indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name');
} else {
$userHas = Filament::auth()->user()->plant_id;
if ($userHas && strlen($userHas) > 0) {
return 'Plant: Choose plant to filter records.';
}
}
if (! empty($data['document_number'])) {
$indicators[] = 'Doc No: '.$data['document_number'];
}
if (! empty($data['invoice_number'])) {
$indicators[] = 'Invoice No: '.$data['invoice_number'];
}
if (! empty($data['supplier_number'])) {
$indicators[] = 'Supplier No: '.$data['supplier_number'];
}
if (! empty($data['created_from'])) {
$indicators[] = 'From: '.$data['created_from'];
}
if (! empty($data['created_to'])) {
$indicators[] = 'To: '.$data['created_to'];
}
return $indicators;
}),
])
->filtersFormMaxHeight('280px')
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\ForceDeleteBulkAction::make(),
Tables\Actions\RestoreBulkAction::make(),
]),
])
->headerActions([
ImportAction::make()
->label('Import Panel GR Masters')
->color('warning')
->importer(PanelGrMasterImporter::class)
->visible(function () {
return Filament::auth()->user()->can('view import panel gr master');
}),
ExportAction::make()
->label('Export Panel GR Masters')
->color('warning')
->exporter(PanelGrMasterExporter::class)
->visible(function () {
return Filament::auth()->user()->can('view export panel gr master');
}),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListPanelGrMasters::route('/'),
'create' => Pages\CreatePanelGrMaster::route('/create'),
'view' => Pages\ViewPanelGrMaster::route('/{record}'),
'edit' => Pages\EditPanelGrMaster::route('/{record}/edit'),
];
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}
}

View File

@@ -0,0 +1,38 @@
<?php
namespace App\Filament\Resources\PanelGrMasterResource\Pages;
use App\Filament\Resources\PanelGrMasterResource;
use App\Models\PanelGrMaster;
use Filament\Actions;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
use Illuminate\Validation\ValidationException;
class CreatePanelGrMaster extends CreateRecord
{
protected static string $resource = PanelGrMasterResource::class;
protected function mutateFormDataBeforeCreate(array $data): array
{
$exists = PanelGrMaster::where('plant_id', $data['plant_id'])
->where('item_id', $data['item_id'])
->where('document_number', $data['document_number'])
->where('invoice_number', $data['invoice_number'])
->where('supplier_number', $data['supplier_number'])
->exists();
if ($exists) {
Notification::make()
->title('Duplicate Record')
->body('This combination already exists in Master.')
->danger()
->send();
throw ValidationException::withMessages([
'item_id' => 'This combination already exists in Master.',
]);
}
return $data;
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Filament\Resources\PanelGrMasterResource\Pages;
use App\Filament\Resources\PanelGrMasterResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditPanelGrMaster extends EditRecord
{
protected static string $resource = PanelGrMasterResource::class;
protected function getHeaderActions(): array
{
return [
Actions\ViewAction::make(),
Actions\DeleteAction::make(),
Actions\ForceDeleteAction::make(),
Actions\RestoreAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\PanelGrMasterResource\Pages;
use App\Filament\Resources\PanelGrMasterResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListPanelGrMasters extends ListRecords
{
protected static string $resource = PanelGrMasterResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\PanelGrMasterResource\Pages;
use App\Filament\Resources\PanelGrMasterResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
class ViewPanelGrMaster extends ViewRecord
{
protected static string $resource = PanelGrMasterResource::class;
protected function getHeaderActions(): array
{
return [
Actions\EditAction::make(),
];
}
}

View File

@@ -170,6 +170,8 @@ class ProductionCharacteristicResource extends Resource
->label('Production Order'),
Forms\Components\TextInput::make('serial_number')
->label('Serial Number'),
Forms\Components\TextInput::make('inspection_lot_number')
->label('Inspection Lot No'),
Forms\Components\TextInput::make('characteristic_name')
->label('Characteristic Name'),
Forms\Components\TextInput::make('observed_value')
@@ -235,7 +237,12 @@ class ProductionCharacteristicResource extends Resource
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('production_order')
->label('Production Order')
->label('Production Order / Doc No')
->searchable()
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('inspection_lot_number')
->label('Inspection Lot No')
->searchable()
->alignCenter()
->sortable(),
@@ -253,9 +260,9 @@ class ProductionCharacteristicResource extends Resource
->label('Spec. Value')
// ->searchable()
->formatStateUsing(function ($record) {
$specVal = ProductCharacteristicsMaster::where('plant_id', $record->plant_id)->where('item_id', $record->item_id)->where('line_id', $record->line_id)->where('machine_id', $record->machine_id)->first();
$specVal = ProductCharacteristicsMaster::where('plant_id', $record->plant_id)->where('item_id', $record->item_id)->where('line_id', $record->line_id)->where('machine_id', $record->machine_id)->where('name', $record->characteristic_name)->first();
// return $record?->plant_id.'-'.$record?->item_id.'-'.$record->line_id.'-'.$record?->machine_id;
return $specVal?->lower.' - '.$specVal?->upper;
})
->alignCenter()
@@ -276,21 +283,10 @@ class ProductionCharacteristicResource extends Resource
'Not Ok' => 'danger',
'NotOk' => 'danger',
'ConditionallyAccepted' => 'success',
default => 'gray',
default => 'black',
})
->alignCenter()
->sortable(),
// Tables\Columns\TextColumn::make('inspection_status')
// ->label('Inspection Status')
// ->searchable()
// ->color(fn (string $state): string => match ($state) {
// 'Ok' => 'success',
// 'Not Ok' => 'danger',
// 'NotOk' => 'danger',
// default => 'gray',
// })
// ->alignCenter()
// ->sortable(),
Tables\Columns\TextColumn::make('remark')
->label('Remark')
->searchable()

View File

@@ -3,6 +3,7 @@
namespace App\Filament\Resources\ProductionOrderResource\Pages;
use App\Filament\Resources\ProductionOrderResource;
use App\Models\Item;
use App\Models\Plant;
use App\Models\ProductionOrder;
use Filament\Facades\Filament;
@@ -282,6 +283,64 @@ class CreateProductionOrder extends CreateRecord
}
}
public function exportSerialNo(){
$pOrder = trim($this->form->getState()['production_order'] ?? '') ?? null;
$plantId = trim($this->form->getState()['plant_id'] ?? '') ?? null;
$itemId = trim($this->form->getState()['item_id'] ?? '') ?? null;
$fromSerNo = trim($this->form->getState()['from_serial_number'] ?? '') ?? null;
$toSerNo = trim($this->form->getState()['to_serial_number'] ?? '') ?? null;
$plantCode = Plant::where('id', $plantId)->value('code');
// $itemCode = Item::where('id', $itemId)->value('code');
if (empty($plantId)) {
Notification::make()
->title('Plant name cannot be empty!')
->danger()
->send();
return;
} elseif (empty($pOrder)) {
Notification::make()
->title('Production order cannot be empty!')
->danger()
->send();
return;
}
elseif (empty($fromSerNo)) {
Notification::make()
->title('From serial number cannot be empty!')
->danger()
->send();
return;
}
elseif (empty($toSerNo)) {
Notification::make()
->title('To serial number cannot be empty!')
->danger()
->send();
return;
}
$pOrderExists = ProductionOrder::where('plant_id', $plantId)->where('production_order', $pOrder)->first();
if (! $pOrderExists) {
Notification::make()
->title("Production Order '{$pOrder}' does not exist to get print!")
->danger()
->send();
return;
} else {
return redirect()->route('production-orders.exportSerial', ['production_order' => $pOrder, 'plant_code' => $plantCode, 'from_serial_no' => $fromSerNo, 'to_serial_no' => $toSerNo]);
}
}
protected function getFormActions(): array
{
return [];

View File

@@ -157,6 +157,64 @@ class EditProductionOrder extends EditRecord
}
}
public function exportSerialNo(){
$pOrder = trim($this->form->getState()['production_order'] ?? '') ?? null;
$plantId = trim($this->form->getState()['plant_id'] ?? '') ?? null;
$itemId = trim($this->form->getState()['item_id'] ?? '') ?? null;
$fromSerNo = trim($this->form->getState()['from_serial_number'] ?? '') ?? null;
$toSerNo = trim($this->form->getState()['to_serial_number'] ?? '') ?? null;
$plantCode = Plant::where('id', $plantId)->value('code');
// $itemCode = Item::where('id', $itemId)->value('code');
if (empty($plantId)) {
Notification::make()
->title('Plant name cannot be empty!')
->danger()
->send();
return;
} elseif (empty($pOrder)) {
Notification::make()
->title('Production order cannot be empty!')
->danger()
->send();
return;
}
elseif (empty($fromSerNo)) {
Notification::make()
->title('From serial number cannot be empty!')
->danger()
->send();
return;
}
elseif (empty($toSerNo)) {
Notification::make()
->title('To serial number cannot be empty!')
->danger()
->send();
return;
}
$pOrderExists = ProductionOrder::where('plant_id', $plantId)->where('production_order', $pOrder)->first();
if (! $pOrderExists) {
Notification::make()
->title("Production Order '{$pOrder}' does not exist to get print!")
->danger()
->send();
return;
} else {
return redirect()->route('production-orders.exportSerial', ['production_order' => $pOrder, 'plant_code' => $plantCode, 'from_serial_no' => $fromSerNo, 'to_serial_no' => $toSerNo]);
}
}
protected function getHeaderActions(): array
{
return [

View File

@@ -3,6 +3,7 @@
namespace App\Filament\Resources\ProductionOrderResource\Pages;
use App\Filament\Resources\ProductionOrderResource;
use App\Models\Item;
use App\Models\Plant;
use App\Models\ProductionOrder;
use Filament\Actions;
@@ -159,6 +160,64 @@ class ViewProductionOrder extends ViewRecord
}
}
public function exportSerialNo(){
$pOrder = trim($this->form->getState()['production_order'] ?? '') ?? null;
$plantId = trim($this->form->getState()['plant_id'] ?? '') ?? null;
$itemId = trim($this->form->getState()['item_id'] ?? '') ?? null;
$fromSerNo = trim($this->form->getState()['from_serial_number'] ?? '') ?? null;
$toSerNo = trim($this->form->getState()['to_serial_number'] ?? '') ?? null;
$plantCode = Plant::where('id', $plantId)->value('code');
// $itemCode = Item::where('id', $itemId)->value('code');
if (empty($plantId)) {
Notification::make()
->title('Plant name cannot be empty!')
->danger()
->send();
return;
} elseif (empty($pOrder)) {
Notification::make()
->title('Production order cannot be empty!')
->danger()
->send();
return;
}
elseif (empty($fromSerNo)) {
Notification::make()
->title('From serial number cannot be empty!')
->danger()
->send();
return;
}
elseif (empty($toSerNo)) {
Notification::make()
->title('To serial number cannot be empty!')
->danger()
->send();
return;
}
$pOrderExists = ProductionOrder::where('plant_id', $plantId)->where('production_order', $pOrder)->first();
if (! $pOrderExists) {
Notification::make()
->title("Production Order '{$pOrder}' does not exist to get print!")
->danger()
->send();
return;
} else {
return redirect()->route('production-orders.exportSerial', ['production_order' => $pOrder, 'plant_code' => $plantCode, 'from_serial_no' => $fromSerNo, 'to_serial_no' => $toSerNo]);
}
}
protected function getHeaderActions(): array
{
return [

View File

@@ -3507,6 +3507,17 @@ class QualityValidationResource extends Resource
return;
}
if (strpos($state, '|') !== false) {
$state = explode('|', $state)[0];
if ($state != $expectedValue){
$set('part_validation1_error', 'Invalid input for part validation 1.');
}
else{
$set('part_validation1', $state);
$set('part_validation1_error', null);
}
}
if ($state == $expectedValue) {
$set('part_validation1_error', null);
} else {
@@ -3518,14 +3529,80 @@ class QualityValidationResource extends Resource
$mPlantName = $mailData['plant_name'];
$emails = $mailData['emails'];
$ccEmails = $mailData['cc_emails'] ?? [];
$mUserName = Filament::auth()->user()->name;
if (! empty($emails)) {
// Mail::to($emails)->send(new InvalidSerialMail($serNo, $invoiceNumber, $mPlantName, $mInvoiceType));
Mail::to($emails)->send(
new InvalidQualityMail($state, $mPorder, $mPlantName, $mLinePart, $mUserName, $mExpectedValue, 'InvalidPartNumber')
);
} else {
// if (! empty($emails)) {
// if (is_array($emails)) {
// $emailList = collect($emails)
// ->flatMap(fn ($email) => explode(',', $email))
// ->map(fn ($email) => trim($email))
// ->filter()
// ->toArray();
// } else {
// $emailList = array_map('trim', explode(',', $emails));
// }
// $ccList = [];
// if (!empty($cc_emails)) {
// if (is_array($cc_emails)) {
// $ccList = collect($cc_emails)
// ->flatMap(fn ($email) => explode(',', $email))
// ->map(fn ($email) => trim($email))
// ->filter()
// ->toArray();
// } else {
// $ccList = collect(explode(',', $cc_emails))
// ->map(fn ($email) => trim($email))
// ->filter()
// ->toArray();
// }
// }
// Mail::to($emailList)
// ->cc($ccList)
// ->send(
// new InvalidQualityMail(
// $state,
// $mPorder,
// $mPlantName,
// $mLinePart,
// $mUserName,
// $mExpectedValue,
// 'InvalidPartNumber'
// )
// );
// }
if (!empty($emails)) {
$emailList = collect(is_array($emails) ? $emails : explode(',', $emails))
->flatMap(fn ($email) => explode(',', $email))
->map(fn ($email) => trim($email))
->filter()
->toArray();
$ccList = collect(is_array($ccEmails) ? $ccEmails : explode(',', $ccEmails))
->flatMap(fn ($email) => explode(',', $email))
->map(fn ($email) => trim($email))
->filter()
->toArray();
Mail::to($emailList)
->cc($ccList)
->send(
new InvalidQualityMail(
$state,
$mPorder,
$mPlantName,
$mLinePart,
$mUserName,
$mExpectedValue,
'InvalidPartNumber'
)
);
}
else {
\Log::warning("No recipients found for plant {$mPlantName}, module Serial, rule invalid_serial.");
}
$set('part_validation1', null);
@@ -3967,6 +4044,7 @@ class QualityValidationResource extends Resource
->where('module', 'QualityValidation')
->where('rule_name', 'QualityMail')
->where(fn ($q) => $q->whereNull('schedule_type')->orWhere('schedule_type', ''))
// ->get()
->pluck('email')
->toArray();
@@ -3984,13 +4062,16 @@ class QualityValidationResource extends Resource
->where('module', 'QualityValidation')
->where('rule_name', 'QualityMail')
->where(fn ($q) => $q->whereNull('schedule_type')->orWhere('schedule_type', ''))
->pluck('email')
->toArray();
->get(['email', 'cc_emails']);
// ->pluck('email')
// ->toArray();
return [
'plant_id' => $plantId,
'plant_name' => $mPlantName,
'emails' => $emails,
'emails' => $emails->pluck('email')->filter()->toArray(),
'cc_emails' => $emails->pluck('cc_emails')->filter()->toArray(),
// 'emails' => $emails,
];
}

View File

@@ -0,0 +1,453 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Exports\StickerDetailExporter;
use App\Filament\Imports\StickerDetailImporter;
use App\Filament\Resources\StickerDetailResource\Pages;
use App\Filament\Resources\StickerDetailResource\RelationManagers;
use App\Models\ItemCharacteristic;
use App\Models\StickerDetail;
use App\Models\StickerStructureDetail;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Illuminate\Support\Facades\Schema;
use Closure;
use Illuminate\Support\Facades\File;
class StickerDetailResource extends Resource
{
protected static ?string $model = StickerDetail::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Customized Sticker Printing';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\Select::make('sticker_structure_detail_id')
->label('Sticker ID')
->reactive()
->relationship('stickerStructureDetail', 'sticker_id')
->options(function (callable $get) {
return StickerStructureDetail::pluck('sticker_id', 'id');
})
->required()
->afterStateUpdated(function (callable $get, callable $set) {
// if ($get('element_id')) {
// return;
// }
$structureId = $get('sticker_structure_detail_id');
$set('design_element_type', null);
$set('element_id', null);
if (!$structureId) {
$set('element_id', null);
return;
}
$maxId = StickerDetail::where('sticker_structure_detail_id', $structureId)
->max('element_id');
$nextId = $maxId ? ((int) $maxId + 1) : 1;
$formattedId = str_pad($nextId, 3, '0', STR_PAD_LEFT);
$set('element_id', $formattedId);
}),
Forms\Components\Select::make('design_element_type')
->label('Design Element Type')
->reactive()
->options([
'Text' => 'Text',
'Shape' => 'Shape',
'Image' => 'Image',
'QR' => 'QR',
]),
Forms\Components\TextInput::make('element_id')
->label('Element ID')
->readOnly()
->reactive(),
Forms\Components\Select::make('element_type')
->label('Element Type')
->options([
'Static' => 'Static',
'Dynamic' => 'Dynamic',
]),
Forms\Components\Select::make('characteristics_type')
->label('Characteristics')
->reactive()
->searchable()
->options(
collect(Schema::getColumnListing('item_characteristics'))
->reject(fn ($column) => in_array($column, [
'id',
'plant_id',
'item_id',
'class',
'zz1_cn_bill_ord',
'created_at',
'updated_at',
'deleted_at',
'created_by',
'updated_by',
]))
->mapWithKeys(fn ($column) => [
$column => ucfirst(str_replace('_', ' ', $column))
])
->prepend('Item Code', 'item_code')
->prepend('Serial Number', 'serial_number')
->prepend('Plant Name', 'plant_name')
->prepend('Plant Address', 'plant_address')
->prepend('Current Date', 'current_date')
->toArray()
),
Forms\Components\TextInput::make('string_value')
->label('String Value')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Text'),
Forms\Components\Select::make('string_font')
->label('String Font')
->reactive()
->options(function () {
$files = File::files(storage_path('app/fonts'));
return collect($files)
->mapWithKeys(function ($file) {
$name = pathinfo($file->getFilename(), PATHINFO_FILENAME);
return [$name => $name];
})
->toArray();
})
->visible(fn ($get) => $get('design_element_type') == 'Text'),
Forms\Components\TextInput::make('string_size')
->label('String Size')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Text'),
Forms\Components\Select::make('element_colour')
->label('Element Colour')
->options([
'' => 'Default (Black)',
'#000000' => 'Black',
'#FFFFFF' => 'White',
'#FF0000' => 'Red',
'#00FF00' => 'Lime',
'#0000FF' => 'Blue',
'#FFFF00' => 'Yellow',
'#00FFFF' => 'Cyan',
'#FF00FF' => 'Magenta',
'#800000' => 'Maroon',
'#808000' => 'Olive',
'#008000' => 'Green',
'#800080' => 'Purple',
'#008080' => 'Teal',
'#808080' => 'Gray',
'#C0C0C0' => 'Silver',
'#FFA500' => 'Orange',
'#FFC0CB' => 'Pink',
'#A52A2A' => 'Brown',
'#87CEEB' => 'Sky Blue',
])
->nullable()
->reactive(),
Forms\Components\Select::make('string_align')
->label('String Align')
->options([
'Left' => 'Left',
'Right' => 'Right',
'Center' => 'Center',
])
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Text'),
Forms\Components\TextInput::make('string_x_value')
->label('String X Value')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Text'),
Forms\Components\TextInput::make('string_y_value')
->label('String Y Value')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Text'),
Forms\Components\Select::make('shape_name')
->label('Shape Name')
->reactive()
->options([
'Line' => 'Line',
'Rectangle' => 'Rectangle',
'CurvedRectangle' => 'CurvedRectangle',
])
->visible(fn ($get) => $get('design_element_type') == 'Shape'),
Forms\Components\TextInput::make('shape_pen_size')
->label('Shape Pen Size')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Shape'),
Forms\Components\TextInput::make('curve_radius')
->label('Curve Radius')
->reactive()
->visible(fn ($get) => $get('shape_name') == 'CurvedRectangle'),
Forms\Components\TextInput::make('shape_x1_value')
->label('Shape X1 Value')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Shape'),
Forms\Components\TextInput::make('shape_y1_value')
->label('Shape Y1 Value')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Shape'),
Forms\Components\TextInput::make('shape_x2_value')
->label('Shape X2 Value')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Shape'),
Forms\Components\TextInput::make('shape_y2_value')
->label('Shape Y2 Value')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Shape'),
// Forms\Components\FileUpload::make('image_path')
// ->label('Image')
// ->image()
// ->directory('sticker-images')
// ->visibility('public')
// ->preserveFilenames(false)
// ->required(false)
// ->reactive()
// ->visible(fn ($get) => $get('design_element_type') == 'Image'),
// Forms\Components\TextInput::make('image_type')
// ->label('Image Type')
// ->reactive()
// ->visible(fn ($get) => $get('design_element_type') == 'Image'),
Forms\Components\TextInput::make('image_x')
->label('Image X')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Image'),
Forms\Components\TextInput::make('image_y')
->label('Image Y')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Image'),
Forms\Components\TextInput::make('image_width')
->label('Image Width')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Image'),
Forms\Components\TextInput::make('image_height')
->label('Image Height')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'Image'),
Forms\Components\TextInput::make('qr_value')
->label('QR Value')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'QR'),
Forms\Components\TextInput::make('qr_align')
->label('QR Align')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'QR'),
Forms\Components\TextInput::make('qr_size')
->label('QR Size')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'QR'),
Forms\Components\TextInput::make('qr_x_value')
->label('QR X Value')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'QR'),
Forms\Components\TextInput::make('qr_y_value')
->label('QR Y Value')
->reactive()
->visible(fn ($get) => $get('design_element_type') == 'QR'),
Forms\Components\Hidden::make('created_by')
->label('created_by')
->default(Filament::auth()->user()?->name),
Forms\Components\Hidden::make('updated_by')
->label('updated_by')
->default(Filament::auth()->user()?->name),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('No.')
->label('No.')
->getStateUsing(function ($record, $livewire, $column, $rowLoop) {
$paginator = $livewire->getTableRecords();
$perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10;
$currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1;
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}),
Tables\Columns\TextColumn::make('stickerStructureDetail.sticker_id')
->label('Sticker ID')
->searchable()
->sortable()
->alignCenter(),
Tables\Columns\TextColumn::make('design_element_type')
->label('Design Element Type')
->searchable()
->sortable()
->alignCenter(),
Tables\Columns\TextColumn::make('element_id')
->label('Element ID')
->searchable()
->sortable()
->alignCenter(),
Tables\Columns\TextColumn::make('element_type')
->label('Element Type')
->alignCenter(),
Tables\Columns\TextColumn::make('characteristics_type')
->label('Characteristics Type')
->searchable()
->sortable()
->alignCenter(),
Tables\Columns\TextColumn::make('string_value')
->label('String Value')
->alignCenter(),
Tables\Columns\TextColumn::make('string_font')
->label('String Font')
->alignCenter(),
Tables\Columns\TextColumn::make('string_size')
->label('String Size')
->alignCenter(),
// Tables\Columns\TextColumn::make('element_colour')
// ->label('Element Colour')
// ->alignCenter(),
Tables\Columns\TextColumn::make('string_align')
->label('String Align')
->alignCenter(),
Tables\Columns\TextColumn::make('string_x_value')
->label('String X Value')
->alignCenter(),
Tables\Columns\TextColumn::make('string_y_value')
->label('String Y Value')
->alignCenter(),
Tables\Columns\TextColumn::make('shape_name')
->label('Shape Name')
->alignCenter(),
Tables\Columns\TextColumn::make('shape_pen_size')
->label('Shape Pen Size')
->alignCenter(),
Tables\Columns\TextColumn::make('curve_radius')
->label('Curve Radius'),
Tables\Columns\TextColumn::make('shape_x1_value')
->label('Shape X1 Value')
->alignCenter(),
Tables\Columns\TextColumn::make('shape_y1_value')
->label('Shape Y1 Value')
->alignCenter(),
Tables\Columns\TextColumn::make('shape_x2_value')
->label('Shape X2 Value')
->alignCenter(),
Tables\Columns\TextColumn::make('shape_y2_value')
->label('Shape Y2 Value')
->alignCenter(),
Tables\Columns\TextColumn::make('image_x')
->label('Image X')
->alignCenter(),
Tables\Columns\TextColumn::make('image_y')
->label('Image Y')
->alignCenter(),
Tables\Columns\TextColumn::make('image_width')
->label('Image Width')
->alignCenter(),
Tables\Columns\TextColumn::make('image_height')
->label('Image Height')
->alignCenter(),
Tables\Columns\TextColumn::make('qr_value')
->label('QR Value')
->alignCenter(),
Tables\Columns\TextColumn::make('qr_align')
->label('QR Align')
->alignCenter(),
Tables\Columns\TextColumn::make('qr_size')
->label('QR Size')
->alignCenter(),
Tables\Columns\TextColumn::make('qr_x_value')
->label('QR X Value')
->alignCenter(),
Tables\Columns\TextColumn::make('qr_y_value')
->label('QR Y Value')
->alignCenter(),
Tables\Columns\TextColumn::make('created_at')
->label('Created At')
->alignCenter()
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('created_by')
->label('Created By')
->alignCenter(),
Tables\Columns\TextColumn::make('updated_at')
->label('Updated At')
->alignCenter()
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('deleted_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
Tables\Filters\TrashedFilter::make(),
])
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\ForceDeleteBulkAction::make(),
Tables\Actions\RestoreBulkAction::make(),
]),
])
->headerActions([
ImportAction::make()
->label('Import Sticker Details')
->color('warning')
->importer(StickerDetailImporter::class)
->visible(function() {
return Filament::auth()->user()->can('view import sticker details');
}),
ExportAction::make()
->label('Export Sticker Details')
->color('warning')
->exporter(StickerDetailExporter::class)
->visible(function() {
return Filament::auth()->user()->can('view export sticker details');
}),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListStickerDetails::route('/'),
'create' => Pages\CreateStickerDetail::route('/create'),
'view' => Pages\ViewStickerDetail::route('/{record}'),
'edit' => Pages\EditStickerDetail::route('/{record}/edit'),
];
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}
}

View File

@@ -0,0 +1,12 @@
<?php
namespace App\Filament\Resources\StickerDetailResource\Pages;
use App\Filament\Resources\StickerDetailResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateStickerDetail extends CreateRecord
{
protected static string $resource = StickerDetailResource::class;
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Filament\Resources\StickerDetailResource\Pages;
use App\Filament\Resources\StickerDetailResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditStickerDetail extends EditRecord
{
protected static string $resource = StickerDetailResource::class;
protected function getHeaderActions(): array
{
return [
Actions\ViewAction::make(),
Actions\DeleteAction::make(),
Actions\ForceDeleteAction::make(),
Actions\RestoreAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\StickerDetailResource\Pages;
use App\Filament\Resources\StickerDetailResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListStickerDetails extends ListRecords
{
protected static string $resource = StickerDetailResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\StickerDetailResource\Pages;
use App\Filament\Resources\StickerDetailResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
class ViewStickerDetail extends ViewRecord
{
protected static string $resource = StickerDetailResource::class;
protected function getHeaderActions(): array
{
return [
Actions\EditAction::make(),
];
}
}

View File

@@ -0,0 +1,478 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Exports\StickerMappingMasterExporter;
use App\Filament\Imports\StickerMappingMasterImporter;
use App\Filament\Resources\StickerMappingMasterResource\Pages;
use App\Filament\Resources\StickerMappingMasterResource\RelationManagers;
use App\Models\Item;
use App\Models\ItemCharacteristic;
use App\Models\Machine;
use App\Models\StickerMappingMaster;
use App\Models\StickerStructureDetail;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
class StickerMappingMasterResource extends Resource
{
protected static ?string $model = StickerMappingMaster::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Customized Sticker Printing';
// public static function form(Form $form): Form
// {
// return $form
// ->schema([
// Forms\Components\TextInput::make('plant_id')
// ->required()
// ->numeric(),
// Forms\Components\TextInput::make('item_id')
// ->required()
// ->numeric(),
// Forms\Components\Textarea::make('sticker1')
// ->columnSpanFull(),
// Forms\Components\Textarea::make('sticker2')
// ->columnSpanFull(),
// Forms\Components\Textarea::make('sticker3')
// ->columnSpanFull(),
// Forms\Components\Textarea::make('sticker4')
// ->columnSpanFull(),
// Forms\Components\Textarea::make('sticker5')
// ->columnSpanFull(),
// Forms\Components\Textarea::make('created_by')
// ->columnSpanFull(),
// Forms\Components\Textarea::make('updated_by')
// ->columnSpanFull(),
// ]);
// }
public static function form(Form $form): Form
{
return $form
->schema([
/* -------- Basic Mapping -------- */
Section::make('Basic Mapping')
->schema([
Select::make('plant_id')
->label('Plant')
->reactive()
->relationship('plant', 'name')
->required(),
Select::make('item_characteristic_id')
->label('Item Code')
->reactive()
//->relationship('item', 'code')
->options(function (callable $get) {
$plantId = $get('plant_id');
if (! $plantId) {
return [];
}
return ItemCharacteristic::query()
->whereHas('item', function ($query) use ($plantId) {
$query->where('plant_id', $plantId);
})
->with('item')
->get()
->mapWithKeys(fn ($ic) => [
$ic->id => $ic->item->code,
]);
})
->searchable()
->required(),
])
->columns(2),
/* -------- Sticker 1 -------- */
Section::make('Sticker 1')
->schema([
Select::make('sticker_structure1_id')
->label('Sticker ID')
->options(function (callable $get) {
return StickerStructureDetail::pluck('sticker_id', 'id');
})
->searchable(),
Select::make('sticker1_machine_id')
->label('Work Center')
//->relationship('sticker1Machine', 'name')
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return Machine::where('plant_id', $plantId)->pluck('work_center', 'id');
})
->searchable(),
TextInput::make('sticker1_print_ip')
->label('Printer IP')
->ipv4(),
])
->columns(2),
/* -------- Sticker 2 -------- */
Section::make('Sticker 2')
->schema([
Select::make('sticker_structure2_id')
->label('Sticker ID')
->options(function (callable $get) {
return StickerStructureDetail::pluck('sticker_id', 'id');
})
->searchable(),
Select::make('sticker2_machine_id')
->label('Work Center')
// ->relationship('sticker2Machine', 'name')
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return Machine::where('plant_id', $plantId)->pluck('work_center', 'id');
})
->searchable(),
TextInput::make('sticker2_print_ip')
->label('Printer IP')
->ipv4(),
])
->columns(2),
/* -------- Sticker 3 -------- */
Section::make('Sticker 3')
->schema([
Select::make('sticker_structure3_id')
->label('Sticker ID')
->options(function (callable $get) {
return StickerStructureDetail::pluck('sticker_id', 'id');
})
->searchable(),
Select::make('sticker3_machine_id')
->label('Work Center')
//->relationship('sticker3Machine', 'name')
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return Machine::where('plant_id', $plantId)->pluck('work_center', 'id');
})
->searchable(),
TextInput::make('sticker3_print_ip')
->label('Printer IP')
->ipv4(),
])
->columns(2),
/* -------- Sticker 4 -------- */
Section::make('Sticker 4')
->schema([
Select::make('sticker_structure4_id')
->label('Sticker ID')
->options(function (callable $get) {
return StickerStructureDetail::pluck('sticker_id', 'id');
})
->searchable(),
Select::make('sticker4_machine_id')
->label('Work Center')
//->relationship('sticker4Machine', 'name')
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return Machine::where('plant_id', $plantId)->pluck('work_center', 'id');
})
->searchable(),
TextInput::make('sticker4_print_ip')
->label('Printer IP')
->ipv4(),
])
->columns(2),
/* -------- Sticker 5 -------- */
Section::make('Sticker 5')
->schema([
Select::make('sticker_structure5_id')
->label('Sticker ID')
->options(function (callable $get) {
return StickerStructureDetail::pluck('sticker_id', 'id');
})
->searchable(),
Select::make('sticker5_machine_id')
->label('Work Center')
//->relationship('sticker5Machine', 'name')
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return Machine::where('plant_id', $plantId)->pluck('work_center', 'id');
})
->searchable(),
TextInput::make('sticker5_print_ip')
->label('Printer IP')
->ipv4(),
])
->columns(2),
/* -------- Sticker 6 -------- */
Section::make('Sticker 6')
->schema([
Select::make('sticker_structure6_id')
->label('Sticker ID')
->options(function (callable $get) {
return StickerStructureDetail::pluck('sticker_id', 'id');
})
->searchable(),
Select::make('sticker6_machine_id')
->label('Work Center')
//->relationship('sticker6Machine', 'name')
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return Machine::where('plant_id', $plantId)->pluck('work_center', 'id');
})
->searchable(),
TextInput::make('sticker6_print_ip')
->label('Printer IP')
->ipv4(),
])
->columns(2),
/* -------- Sticker 7 -------- */
Section::make('Sticker 7')
->schema([
Select::make('sticker_structure7_id')
->label('Sticker ID')
->options(function (callable $get) {
return StickerStructureDetail::pluck('sticker_id', 'id');
})
->searchable(),
Select::make('sticker7_machine_id')
->label('Work Center')
//->relationship('sticker7Machine', 'name')
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return Machine::where('plant_id', $plantId)->pluck('work_center', 'id');
})
->searchable(),
TextInput::make('sticker7_print_ip')
->label('Printer IP')
->ipv4(),
])
->columns(2),
/* -------- Sticker 8 -------- */
Section::make('Sticker 8')
->schema([
Select::make('sticker_structure8_id')
->label('Sticker ID')
->options(function (callable $get) {
return StickerStructureDetail::pluck('sticker_id', 'id');
})
->searchable(),
Select::make('sticker8_machine_id')
->label('Work Center')
//->relationship('sticker8Machine', 'name')
->options(function (callable $get) {
$plantId = $get('plant_id');
if (empty($plantId)) {
return [];
}
return Machine::where('plant_id', $plantId)->pluck('work_center', 'id');
})
->searchable(),
TextInput::make('sticker8_print_ip')
->label('Printer IP')
->ipv4(),
])
->columns(2),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('No.')
->label('No.')
->getStateUsing(function ($record, $livewire, $column, $rowLoop) {
$paginator = $livewire->getTableRecords();
$perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10;
$currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1;
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}),
Tables\Columns\TextColumn::make('plant.name')
->label('Plant')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('itemCharacteristic.item.code')
->label('Item')
->alignCenter()
->sortable(),
Tables\Columns\TextColumn::make('sticker1Structure.sticker_id')
->label('Sticker 1')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker1Machine.work_center')
->label('WC 1')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker1_print_ip')
->label('Printer IP 1')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker2Structure.sticker_id')
->label('Sticker 2')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker2Machine.work_center')
->label('WC 2')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker2_print_ip')
->label('Printer IP 2')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker3Structure.sticker_id')
->label('Sticker 3')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker3Machine.work_center')
->label('WC 3')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker3_print_ip')
->label('Printer IP 3')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker4Structure.sticker_id')
->label('Sticker 4')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker4Machine.work_center')
->label('WC 4')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker4_print_ip')
->label('Printer IP 4')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker5Structure.sticker_id')
->label('Sticker 5')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker5Machine.work_center')
->label('WC 5')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker5_print_ip')
->label('Printer IP 5')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker6Structure.sticker_id')
->label('Sticker 6')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker6Machine.work_center')
->label('WC 6')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker6_print_ip')
->label('Printer IP 6')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker7Structure.sticker_id')
->label('Sticker 7')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker7Machine.work_center')
->label('WC 7')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker7_print_ip')
->label('Printer IP 7')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker8Structure.sticker_id')
->label('Sticker 8')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker8Machine.work_center')
->label('WC 8')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker8_print_ip')
->label('Printer IP 8')
->alignCenter(),
Tables\Columns\TextColumn::make('created_at')
->label('Created At')
->alignCenter()
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('updated_at')
->label('Updated At')
->alignCenter()
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('deleted_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
Tables\Filters\TrashedFilter::make(),
])
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\ForceDeleteBulkAction::make(),
Tables\Actions\RestoreBulkAction::make(),
]),
])
->headerActions([
ImportAction::make()
->importer(StickerMappingMasterImporter::class)
->label('Import Sticker Mapping Master')
->color('warning')
->visible(function () {
return Filament::auth()->user()->can('view import sticker mapping master');
}),
ExportAction::make()
->exporter(StickerMappingMasterExporter::class)
->label('Export Sticker Mapping Master')
->color('warning')
->visible(function () {
return Filament::auth()->user()->can('view export sticker mapping master');
}),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListStickerMappingMasters::route('/'),
'create' => Pages\CreateStickerMappingMaster::route('/create'),
'view' => Pages\ViewStickerMappingMaster::route('/{record}'),
'edit' => Pages\EditStickerMappingMaster::route('/{record}/edit'),
];
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}
}

View File

@@ -0,0 +1,12 @@
<?php
namespace App\Filament\Resources\StickerMappingMasterResource\Pages;
use App\Filament\Resources\StickerMappingMasterResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateStickerMappingMaster extends CreateRecord
{
protected static string $resource = StickerMappingMasterResource::class;
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Filament\Resources\StickerMappingMasterResource\Pages;
use App\Filament\Resources\StickerMappingMasterResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditStickerMappingMaster extends EditRecord
{
protected static string $resource = StickerMappingMasterResource::class;
protected function getHeaderActions(): array
{
return [
Actions\ViewAction::make(),
Actions\DeleteAction::make(),
Actions\ForceDeleteAction::make(),
Actions\RestoreAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\StickerMappingMasterResource\Pages;
use App\Filament\Resources\StickerMappingMasterResource;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
class ListStickerMappingMasters extends ListRecords
{
protected static string $resource = StickerMappingMasterResource::class;
protected function getHeaderActions(): array
{
return [
Actions\CreateAction::make(),
];
}
}

View File

@@ -0,0 +1,19 @@
<?php
namespace App\Filament\Resources\StickerMappingMasterResource\Pages;
use App\Filament\Resources\StickerMappingMasterResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
class ViewStickerMappingMaster extends ViewRecord
{
protected static string $resource = StickerMappingMasterResource::class;
protected function getHeaderActions(): array
{
return [
Actions\EditAction::make(),
];
}
}

View File

@@ -540,8 +540,15 @@ class StickerMasterResource extends Resource
->alignCenter()
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('item.category')
->label('Category')
->default('-')
->alignCenter()
->sortable()
->searchable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('item.description')
->label('Item Description')
->label('Description')
->alignCenter()
->sortable()
->searchable()

View File

@@ -0,0 +1,207 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Exports\StickerStructureDetailExporter;
use App\Filament\Imports\StickerStructureDetailImporter;
use App\Filament\Resources\StickerStructureDetailResource\Pages;
use App\Filament\Resources\StickerStructureDetailResource\RelationManagers;
use App\Models\ItemCharacteristic;
use App\Models\StickerStructureDetail;
use Filament\Facades\Filament;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Forms\Components\Actions\Action;
use Illuminate\Support\HtmlString;
use Filament\Forms\Components\Html;
use Filament\Forms\Get;
use Filament\Tables\Actions\ExportAction;
use Filament\Tables\Actions\ImportAction;
class StickerStructureDetailResource extends Resource
{
protected static ?string $model = StickerStructureDetail::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Customized Sticker Printing';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('sticker_id')
->label('Sticker ID')
->reactive()
->required()
->afterStateUpdated(function ($state, callable $set) {
//\Log::info('Sticker ID typed:', ['sticker_id' => $state]);
$set('sticker_id_live', $state);
}),
Forms\Components\TextInput::make('sticker_width')
->label('Sticker Width')
->required(),
Forms\Components\TextInput::make('sticker_height')
->label('Sticker Height')
->required(),
Forms\Components\TextInput::make('sticker_lmargin')
->label('Sticker Left Margin')
->required(),
Forms\Components\TextInput::make('sticker_rmargin')
->label('Sticker Right Margin')
->required(),
Forms\Components\TextInput::make('sticker_tmargin')
->label('Sticker Top Margin')
->required(),
Forms\Components\TextInput::make('sticker_bmargin')
->label('Sticker Bottom Margin')
->required(),
Forms\Components\Hidden::make('created_by')
->label('Created By')
->default(Filament::auth()->user()?->name),
Forms\Components\Hidden::make('updated_by')
->label('Updated By')
->default(Filament::auth()->user()?->name),
// Forms\Components\Hidden::make('sticker_id_live')
// ->default(fn ($get) => $get('sticker_id'))
// ->reactive()
// ->afterStateUpdated(function ($state, callable $set) {
// $set('sticker_id_live', $state);
// }),
// Forms\Components\ViewField::make('generate_template')
// ->view('fields.generate-template')
// ->reactive()
// //->key(fn ($get) => 'generate-template' . ($get('sticker_id_live') ?? 'empty'))
// ->key(fn (Get $get) =>
// 'generate-template-' .
// ($get('sticker_id_live') ?? 'empty') . '-' .
// ($get('plant_id') ?? 'empty') . '-' .
// ($get('item_characteristic_id') ?? 'empty')
// )
// // ->viewData(fn (Get $get) => [
// // 'sticker_id' => $get('sticker_id_live') ?? 'empty',
// // ]),
// ->viewData(fn (Get $get) => [
// 'sticker_id' => $get('sticker_id_live') ?? 'empty',
// 'plant_id' => $get('plant_id') ?? 'empty',
// 'item_characteristic_id' => $get('item_characteristic_id') ?? 'empty',
// ])
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('No.')
->label('No.')
->getStateUsing(function ($record, $livewire, $column, $rowLoop) {
$paginator = $livewire->getTableRecords();
$perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10;
$currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1;
return ($currentPage - 1) * $perPage + $rowLoop->iteration;
}),
Tables\Columns\TextColumn::make('sticker_id')
->label('Sticker ID')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker_width')
->label('Sticker Width')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker_height')
->label('Sticker Height')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker_lmargin')
->label('Sticker Left Margin')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker_rmargin')
->label('Sticker Right Margin')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker_tmargin')
->label('Sticker Top Margin')
->alignCenter(),
Tables\Columns\TextColumn::make('sticker_bmargin')
->label('Sticker Bottom Margin')
->alignCenter(),
Tables\Columns\TextColumn::make('created_at')
->label('Created At')
->alignCenter()
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('updated_at')
->label('Updated At')
->alignCenter()
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('deleted_at')
->label('Deleted At')
->alignCenter()
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
Tables\Filters\TrashedFilter::make(),
])
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
Tables\Actions\ForceDeleteBulkAction::make(),
Tables\Actions\RestoreBulkAction::make(),
]),
])
->headerActions([
ImportAction::make()
->label('Import Sticker Structure Details')
->color('warning')
->importer(StickerStructureDetailImporter::class)
->visible(function() {
return Filament::auth()->user()->can('view import sticker structure details');
}),
ExportAction::make()
->label('Export Sticker Structure Details')
->color('warning')
->exporter(StickerStructureDetailExporter::class)
->visible(function() {
return Filament::auth()->user()->can('view export sticker structure details');
}),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListStickerStructureDetails::route('/'),
'create' => Pages\CreateStickerStructureDetail::route('/create'),
'view' => Pages\ViewStickerStructureDetail::route('/{record}'),
'edit' => Pages\EditStickerStructureDetail::route('/{record}/edit'),
];
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}
}

View File

@@ -0,0 +1,12 @@
<?php
namespace App\Filament\Resources\StickerStructureDetailResource\Pages;
use App\Filament\Resources\StickerStructureDetailResource;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateStickerStructureDetail extends CreateRecord
{
protected static string $resource = StickerStructureDetailResource::class;
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Filament\Resources\StickerStructureDetailResource\Pages;
use App\Filament\Resources\StickerStructureDetailResource;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
class EditStickerStructureDetail extends EditRecord
{
protected static string $resource = StickerStructureDetailResource::class;
protected function getHeaderActions(): array
{
return [
Actions\ViewAction::make(),
Actions\DeleteAction::make(),
Actions\ForceDeleteAction::make(),
Actions\RestoreAction::make(),
];
}
}

Some files were not shown because too many files have changed in this diff Show More