@@ -48,26 +48,40 @@ private function getRelatedModelAudits(
4848 string $ typeField ,
4949 string $ idField
5050 ): \Illuminate \Support \Collection {
51- return Audit::where ('auditable_type ' , $ auditableType )
52- ->where (function ($ query ) use ($ parentClass , $ parentId , $ typeField , $ idField ) {
53- // Include audits where the model still exists
54- $ query ->whereHas ('auditable ' , function ($ subQuery ) use ($ parentClass , $ parentId , $ typeField , $ idField ) {
55- $ subQuery ->where ($ typeField , $ parentClass )
56- ->where ($ idField , $ parentId );
57- })
58- // OR include audits where model was deleted but belonged to this parent
59- ->orWhere (function ($ subQuery ) use ($ parentClass , $ parentId , $ typeField , $ idField ) {
60- $ subQuery ->whereDoesntHave ('auditable ' )
61- ->where (function ($ valueQuery ) use ($ parentClass , $ parentId , $ typeField , $ idField ) {
62- $ valueQuery ->whereJsonContains ("old_values-> {$ typeField }" , $ parentClass )
63- ->whereJsonContains ("old_values-> {$ idField }" , $ parentId )
64- ->orWhereJsonContains ("new_values-> {$ typeField }" , $ parentClass )
65- ->whereJsonContains ("new_values-> {$ idField }" , $ parentId );
66- });
67- });
51+ $ audits = collect ();
52+
53+ // Get audits for models that currently exist and belong to this parent
54+ $ existingModelAudits = Audit::where ('auditable_type ' , $ auditableType )
55+ ->whereHas ('auditable ' , function ($ subQuery ) use ($ parentClass , $ parentId , $ typeField , $ idField ) {
56+ $ subQuery ->where ($ typeField , $ parentClass )
57+ ->where ($ idField , $ parentId );
6858 })
6959 ->with ('user ' , 'auditable ' )
7060 ->get ();
61+
62+ $ audits = $ audits ->merge ($ existingModelAudits );
63+
64+ // Get audits for deleted models - but be very precise to avoid cross-contamination
65+ $ deletedModelAudits = Audit::where ('auditable_type ' , $ auditableType )
66+ ->whereDoesntHave ('auditable ' )
67+ ->get ()
68+ ->filter (function (Audit $ audit ) use ($ parentClass , $ parentId , $ typeField , $ idField ) {
69+ $ oldValues = $ audit ->getAttributeValue ('old_values ' ) ?? [];
70+ $ newValues = $ audit ->getAttributeValue ('new_values ' ) ?? [];
71+
72+ // Check if this audit belongs to our specific parent
73+ $ matchesInOld = isset ($ oldValues [$ typeField ]) && isset ($ oldValues [$ idField ]) &&
74+ $ oldValues [$ typeField ] === $ parentClass &&
75+ (int )$ oldValues [$ idField ] === (int )$ parentId ;
76+
77+ $ matchesInNew = isset ($ newValues [$ typeField ]) && isset ($ newValues [$ idField ]) &&
78+ $ newValues [$ typeField ] === $ parentClass &&
79+ (int )$ newValues [$ idField ] === (int )$ parentId ;
80+
81+ return $ matchesInOld || $ matchesInNew ;
82+ });
83+
84+ return $ audits ->merge ($ deletedModelAudits );
7185 }
7286
7387 protected function formatAuditData (\Illuminate \Support \Collection $ audits ): \Illuminate \Support \Collection
@@ -181,6 +195,7 @@ private function getEntityType(string $auditableType): string
181195 \App \Models \Customers \Customer::class => 'Customer ' ,
182196 \App \Models \Facility::class => 'Facility ' ,
183197 \App \Models \Carriers \Carrier::class => 'Carrier ' ,
198+ \App \Models \Shipments \Shipment::class => 'Shipment ' ,
184199 Document::class => 'Document ' ,
185200 Contact::class => 'Contact ' ,
186201 default => class_basename ($ auditableType ),
@@ -200,11 +215,13 @@ private function getEntityName(Audit $audit): string
200215 if (!$ auditable ) {
201216 // For deleted entities, try to get name from old_values or new_values
202217 $ name = $ oldValues ['name ' ] ?? $ newValues ['name ' ] ?? null ;
218+ $ shipmentNumber = $ oldValues ['shipment_number ' ] ?? $ newValues ['shipment_number ' ] ?? null ;
203219
204220 return match ($ auditableType ) {
205221 \App \Models \Customers \Customer::class => $ name ? $ name . ' (deleted) ' : 'Deleted Customer ' ,
206222 \App \Models \Facility::class => $ name ? $ name . ' (deleted) ' : 'Deleted Facility ' ,
207223 \App \Models \Carriers \Carrier::class => $ name ? $ name . ' (deleted) ' : 'Deleted Carrier ' ,
224+ \App \Models \Shipments \Shipment::class => $ shipmentNumber ? 'Shipment ' . $ shipmentNumber . ' (deleted) ' : 'Deleted Shipment ' ,
208225 Document::class => $ name ? $ name . ' (deleted) ' : 'Deleted Document ' ,
209226 Contact::class => $ name ? $ name . ' (deleted) ' : 'Deleted Contact ' ,
210227 default => 'Deleted Entity ' ,
@@ -215,6 +232,7 @@ private function getEntityName(Audit $audit): string
215232 \App \Models \Customers \Customer::class => $ auditable ->getAttributeValue ('name ' ) ?? 'Unknown Customer ' ,
216233 \App \Models \Facility::class => $ auditable ->getAttributeValue ('name ' ) ?? 'Unknown Facility ' ,
217234 \App \Models \Carriers \Carrier::class => $ auditable ->getAttributeValue ('name ' ) ?? 'Unknown Carrier ' ,
235+ \App \Models \Shipments \Shipment::class => $ auditable ->getAttributeValue ('shipment_number ' ) ? 'Shipment ' . $ auditable ->getAttributeValue ('shipment_number ' ) : 'Shipment # ' . $ auditable ->getKey (),
218236 Document::class => $ auditable ->getAttributeValue ('name ' ) ?? 'Unknown Document ' ,
219237 Contact::class => $ auditable ->getAttributeValue ('name ' ) ?? 'Unknown Contact ' ,
220238 default => 'Unknown Entity ' ,
0 commit comments