@@ -185,4 +185,103 @@ private static function ticketHasAnAssigneeOfOlaGroup(Ticket $ticket, OLA $ola):
185185 $ users_of_dedicated_group
186186 ));
187187 }
188+
189+ /**
190+ * Get data from Item_Ola + linked OLA for a Ticket
191+ *
192+ * @param \Ticket $ticket
193+ *
194+ * @return array<array{olas_id: int, items_olas_id: int, name: string, entities_id: int, is_recursive: bool, type: int, comment: string, number_time: int, use_ticket_calendar: bool, calendars_id: int, date_mod: string, definition_time: string, end_of_working_day: string, date_creation: string, slms_id: int, due_time: string, class: string, item: Ticket, nextaction: false|OlaLevel_Ticket|SlaLevel_Ticket, level: false|\LevelAgreementLevel}>
195+ */
196+ public function getDataFromDBForTicket (Ticket $ ticket ): array
197+ {
198+ /** array ola + item_ola datas */
199+ $ merged_data = [];
200+ // each $item_ola_data row contains linked OLA fields + items_olas_id in 'linkid' field
201+ $ olas_data = iterator_to_array (self ::getListForItem ($ ticket ));
202+
203+ // merge data from ola dans items_ola
204+ foreach ($ olas_data as $ ola_data ) {
205+ $ merged_data [] = $ this ->fillItemOlaData ($ ola_data , $ ticket );
206+ }
207+
208+ return $ merged_data ;
209+ }
210+
211+
212+ /**
213+ * @param \Ticket $ticket
214+ * @param array<int> $olas_ids
215+ * @return array
216+ */
217+ public function getDataFromOlasIdsForTicket (Ticket $ ticket , array $ olas_ids ): array
218+ {
219+ /** array ola + item_ola datas */
220+ $ merged_data = [];
221+ $ ola = new OLA ();
222+
223+ // get ola data from DB - each $item_ola_data row contains linked OLA fields + items_olas_id in 'linkid' field
224+ $ olas_in_db_data = array_values (iterator_to_array (self ::getListForItem ($ ticket )));
225+
226+ // complete with olas not associated to ticket - not yet in items_ola
227+ $ fetched_olas_ids = array_column ($ olas_in_db_data , 'id ' );
228+ $ olas_not_yet_fetched = array_diff (array_values ($ olas_ids ), $ fetched_olas_ids );
229+ $ olas_missing_data = empty ($ olas_not_yet_fetched ) ? [] : $ ola ->find (['id ' => $ olas_not_yet_fetched ]);
230+
231+ $ olas_data = array_merge ($ olas_in_db_data , $ olas_missing_data );
232+
233+ // merge data from ola dans items_ola
234+ foreach ($ olas_data as $ ola_data ) {
235+ $ merged_data [] = $ this ->fillItemOlaData ($ ola_data , $ ticket );
236+ }
237+
238+ return $ merged_data ;
239+ }
240+
241+ /**
242+ * @param array $ola_data fields from ola + possibly 'linkid' field representing items_olas_id
243+ * @param \Ticket $ticket
244+ *
245+ * If 'linkid' is set, it will be used to populate the data from Item_Ola otherwise it will be filled with default values.
246+ *
247+ * @return array{olas_id: int, items_olas_id: int, name: string, entities_id: int, is_recursive: bool, type: int, comment: string, number_time: int, use_ticket_calendar: bool, calendars_id: int, date_mod: string, definition_time: string, end_of_working_day: string, date_creation: string, slms_id: int, due_time: string, class: string, item: Ticket, nextaction: false|OlaLevel_Ticket|SlaLevel_Ticket, level: false|\LevelAgreementLevel}
248+ */
249+ private function fillItemOlaData (array $ ola_data , Ticket $ ticket ): array
250+ {
251+ $ _ola = new OLA ();
252+ // start with the ola data
253+ $ _merged_data = $ ola_data ;
254+
255+ // data defaults for item_ola
256+ $ _merged_data ['itemtype ' ] = $ ticket ::class;
257+ $ _merged_data ['items_id ' ] = $ ticket ->getID ();
258+ $ _merged_data ['olas_id ' ] = $ _merged_data ['id ' ];
259+ $ _merged_data ['start_time ' ] = 0 ;
260+ $ _merged_data ['due_time ' ] = 0 ;
261+ $ _merged_data ['end_time ' ] = 0 ;
262+ $ _merged_data ['waiting_time ' ] = 0 ;
263+ $ _merged_data ['items_olas_id ' ] = 0 ;
264+ $ _merged_data ['olalevel_date ' ] = 0 ; // @todoseb va dégager possiblement
265+ // add data for template
266+ $ _merged_data ['class ' ] = OLA ::class;
267+ $ _merged_data ['item ' ] = $ ticket ; // object, not just fields, functions used in template
268+ $ _merged_data ['nextaction ' ] = $ _ola ->getNextActionForTicket ($ ticket , $ _merged_data ['type ' ]);
269+ $ _merged_data ['level ' ] = $ _ola ->getLevelFromAction ($ _merged_data ['nextaction ' ]);
270+
271+ // if linkid is set (items_olas exists), use it to populate the data
272+ if (isset ($ ola_data ['linkid ' ])) {
273+ $ instance = new static ();
274+ $ instance ->getFromDB ($ _merged_data ['linkid ' ]); // @todoseb lever exception si pas trouvé
275+ $ _merged_data = array_merge ($ _merged_data , $ instance ->fields );
276+ $ _merged_data ['items_olas_id ' ] = $ ola_data ['linkid ' ];
277+ $ _merged_data ['olas_id ' ] = $ ola_data ['id ' ];
278+ }
279+
280+ if (isset ($ _merged_data ['id ' ])) {
281+ unset($ _merged_data ['id ' ]); // removed to avoid confusion with items_olas_id in template, both olas_id and items_olas_id are defined above
282+ }
283+
284+ return $ _merged_data ;
285+ }
286+
188287}
0 commit comments