PluginProbe
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce / 1.6.7
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce v1.6.7
1.17.9 1.17.8 1.17.7 1.17.6 1.17.5 1.17.4 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.3.0 1.3.1 1.3.11 1.3.12 1.3.13 1.3.14 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 All 143 releases
erp / modules / accounting / includes / functions / expenses.php

expenses.php in ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce 1.6.7, at modules/accounting/includes/functions/expenses.php

757 lines 24.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if ( ! defined( 'ABSPATH' ) ) {
4 exit; // Exit if accessed directly
5 }
6
7 /**
8 * Get all expenses
9 *
10 * @param $data
11 *
12 * @return mixed
13 */
14 function erp_acct_get_expenses( $args = [] ) {
15 global $wpdb;
16
17 $defaults = [
18 'number' => 20,
19 'offset' => 0,
20 'orderby' => 'id',
21 'order' => 'DESC',
22 'count' => false,
23 's' => '',
24 ];
25
26 $args = wp_parse_args( $args, $defaults );
27
28 $limit = '';
29
30 if ( '-1' === $args['number'] ) {
31 $limit = "LIMIT {$args['number']} OFFSET {$args['offset']}";
32 }
33
34 $sql = 'SELECT';
35 $sql .= $args['count'] ? ' COUNT( id ) as total_number ' : ' * ';
36 $sql .= "FROM {$wpdb->prefix}erp_acct_expenses WHERE `trn_by_ledger_id` IS NOT NULL ORDER BY {$args['orderby']} {$args['order']} {$limit}";
37
38 if ( $args['count'] ) {
39 return $wpdb->get_var( $sql );
40 }
41
42 $rows = $wpdb->get_results( $sql, ARRAY_A );
43
44 return $rows;
45 }
46
47 /**
48 * Get a single expense
49 *
50 * @param $expense_no
51 *
52 * @return mixed
53 */
54 function erp_acct_get_expense( $expense_no ) {
55 global $wpdb;
56
57 $sql = "SELECT
58
59 expense.id,
60 expense.voucher_no,
61 expense.people_id,
62 expense.people_name,
63 expense.address,
64 expense.trn_date,
65 expense.amount,
66 expense.ref,
67 expense.check_no,
68 expense.particulars,
69 expense.status,
70 expense.trn_by_ledger_id,
71 expense.trn_by,
72 expense.attachments,
73 expense.created_at,
74 expense.created_by,
75 expense.updated_at,
76 expense.updated_by
77
78 FROM {$wpdb->prefix}erp_acct_expenses AS expense WHERE expense.voucher_no = {$expense_no}";
79
80 $row = $wpdb->get_row( $sql, ARRAY_A );
81
82 $row['bill_details'] = erp_acct_format_expense_line_items( $expense_no );
83
84 $check_data = erp_acct_get_check_data_of_expense( $expense_no );
85
86 if ( ! empty( $check_data ) ) {
87 $row['check_data'] = $check_data;
88 }
89
90 return $row;
91 }
92
93 /**
94 * Get a single check
95 *
96 * @param $expense_no
97 *
98 * @return mixed
99 */
100 function erp_acct_get_check( $expense_no ) {
101 global $wpdb;
102
103 $sql = "SELECT
104
105 expense.id,
106 expense.voucher_no,
107 expense.people_id,
108 expense.people_name,
109 expense.address,
110 expense.trn_date,
111 expense.amount,
112 expense.particulars,
113 expense.status,
114 expense.trn_by_ledger_id,
115 expense.trn_by,
116 expense.check_no,
117 expense.attachments,
118 expense.created_at,
119 expense.created_by,
120 expense.updated_at,
121 expense.updated_by,
122
123 ledg_detail.debit,
124 ledg_detail.credit
125
126 FROM {$wpdb->prefix}erp_acct_expenses AS expense
127
128 LEFT JOIN {$wpdb->prefix}erp_acct_ledger_details AS ledg_detail ON expense.voucher_no = ledg_detail.trn_no
129
130 WHERE expense.voucher_no = {$expense_no} AND expense.trn_by = 3";
131
132 $row = $wpdb->get_row( $sql, ARRAY_A );
133
134 $row['bill_details'] = erp_acct_format_check_line_items( $expense_no );
135
136 return $row;
137 }
138
139 /**
140 * Format check line items
141 */
142 function erp_acct_format_check_line_items( $voucher_no ) {
143 global $wpdb;
144
145 $sql = $wpdb->prepare(
146 "SELECT
147 expense.id,
148 expense.voucher_no,
149 expense.status,
150 expense.trn_by,
151 expense.trn_date,
152
153 expense_detail.ledger_id,
154 expense_detail.particulars,
155 expense_detail.amount,
156
157 ledger.name AS ledger_name
158
159 FROM {$wpdb->prefix}erp_acct_expenses AS expense
160 LEFT JOIN {$wpdb->prefix}erp_acct_expense_details AS expense_detail ON expense_detail.trn_no = expense.voucher_no
161 LEFT JOIN {$wpdb->prefix}erp_acct_ledgers AS ledger ON expense_detail.ledger_id = ledger.id
162
163 WHERE expense.voucher_no={$voucher_no} AND expense.trn_by = 3",
164 $voucher_no
165 );
166
167 return $wpdb->get_results( $sql, ARRAY_A );
168 }
169
170 /**
171 * Format expense line items
172 */
173 function erp_acct_format_expense_line_items( $voucher_no ) {
174 global $wpdb;
175
176 $sql = $wpdb->prepare(
177 "SELECT
178 expense_detail.id,
179 expense_detail.ledger_id,
180 ledger.name AS ledger_name,
181 expense_detail.trn_no,
182 expense_detail.particulars,
183 expense_detail.amount
184
185 FROM {$wpdb->prefix}erp_acct_expenses AS expense
186 LEFT JOIN {$wpdb->prefix}erp_acct_expense_details AS expense_detail ON expense.voucher_no = expense_detail.trn_no LEFT JOIN {$wpdb->prefix}erp_acct_ledgers AS ledger ON expense_detail.ledger_id = ledger.id WHERE expense.voucher_no = %d", $voucher_no
187 );
188
189 return $wpdb->get_results( $sql, ARRAY_A );
190 }
191
192 /**
193 * Insert a expense
194 *
195 * @param $data
196 *
197 * @return mixed
198 */
199 function erp_acct_insert_expense( $data ) {
200 global $wpdb;
201
202 $created_by = get_current_user_id();
203 $data['created_at'] = date( 'Y-m-d H:i:s' );
204 $data['created_by'] = $created_by;
205 $data['updated_at'] = date( 'Y-m-d H:i:s' );
206 $data['updated_by'] = $created_by;
207
208 $voucher_no = null;
209 $currency = erp_get_currency( true );
210
211 try {
212 $wpdb->query( 'START TRANSACTION' );
213
214 $type = 'expense';
215
216 if ( isset( $data['voucher_type'] ) && 'check' === $data['voucher_type'] ) {
217 $type = 'check';
218 }
219
220 $wpdb->insert(
221 $wpdb->prefix . 'erp_acct_voucher_no',
222 [
223 'type' => $type,
224 'currency' => $currency,
225 'created_at' => $data['created_at'],
226 'created_by' => $data['created_by'],
227 'updated_at' => isset( $data['updated_at'] ) ? $data['updated_at'] : '',
228 'updated_by' => isset( $data['updated_by'] ) ? $data['updated_by'] : '',
229 ]
230 );
231
232 $voucher_no = $wpdb->insert_id;
233
234 $expense_data = erp_acct_get_formatted_expense_data( $data, $voucher_no );
235
236 $wpdb->insert(
237 $wpdb->prefix . 'erp_acct_expenses',
238 [
239 'voucher_no' => $expense_data['voucher_no'],
240 'people_id' => $expense_data['people_id'],
241 'people_name' => $expense_data['people_name'],
242 'address' => $expense_data['billing_address'],
243 'trn_date' => $expense_data['trn_date'],
244 'amount' => $expense_data['amount'],
245 'ref' => $expense_data['ref'],
246 'check_no' => $expense_data['check_no'],
247 'particulars' => $expense_data['particulars'],
248 'status' => $expense_data['status'],
249 'trn_by' => $expense_data['trn_by'],
250 'trn_by_ledger_id' => $expense_data['trn_by_ledger_id'],
251 'attachments' => $expense_data['attachments'],
252 'created_at' => $expense_data['created_at'],
253 'created_by' => $expense_data['created_by'],
254 'updated_at' => $expense_data['updated_at'],
255 'updated_by' => $expense_data['updated_by'],
256 ]
257 );
258
259 $items = $expense_data['bill_details'];
260
261 foreach ( $items as $key => $item ) {
262 $wpdb->insert(
263 $wpdb->prefix . 'erp_acct_expense_details',
264 [
265 'trn_no' => $voucher_no,
266 'ledger_id' => $item['ledger_id'],
267 'particulars' => ! empty( $item['particulars'] ) ? $item['particulars'] : '',
268 'amount' => $item['amount'],
269 'created_at' => $expense_data['created_at'],
270 'created_by' => $expense_data['created_by'],
271 'updated_at' => $expense_data['updated_at'],
272 'updated_by' => $expense_data['updated_by'],
273 ]
274 );
275
276 erp_acct_insert_expense_data_into_ledger( $expense_data, $item );
277 }
278
279 if ( 1 === $expense_data['status'] ) {
280 $wpdb->query( 'COMMIT' );
281
282 if ( 'check' === $type ) {
283 return erp_acct_get_check( $voucher_no );
284 }
285
286 return erp_acct_get_expense( $voucher_no );
287 }
288
289 $check = 3;
290
291 if ( $check == $expense_data['trn_by'] ) {
292 erp_acct_insert_check_data( $expense_data );
293 } elseif ( 'check' === $type ) {
294 erp_acct_insert_check_data( $expense_data );
295 }
296
297 if ( 'check' === $type ) {
298 erp_acct_insert_source_expense_data_into_ledger( $expense_data );
299 } elseif ( isset( $expense_data['trn_by'] ) && 4 === $expense_data['trn_by'] ) {
300 do_action( 'erp_acct_expense_people_transaction', $expense_data, $voucher_no );
301 } else {
302 //Insert into Ledger for source account
303 erp_acct_insert_source_expense_data_into_ledger( $expense_data );
304 }
305
306 $data['dr'] = 0;
307 $data['cr'] = $expense_data['amount'];
308 erp_acct_insert_data_into_people_trn_details( $data, $voucher_no );
309
310 do_action( 'erp_acct_after_expense_create', $expense_data, $voucher_no );
311
312 $wpdb->query( 'COMMIT' );
313 } catch ( Exception $e ) {
314 $wpdb->query( 'ROLLBACK' );
315
316 return new WP_error( 'expense-exception', $e->getMessage() );
317 }
318
319 $email = erp_get_people_email( $expense_data['people_id'] );
320
321 if ( 'check' === $type ) {
322 $check = erp_acct_get_check( $voucher_no );
323 $check['email'] = $email;
324
325 do_action( 'erp_acct_new_transaction_check', $voucher_no, $check );
326
327 return $check;
328 }
329
330 $expense = erp_acct_get_expense( $voucher_no );
331 $expense['email'] = $email;
332
333 do_action( 'erp_acct_new_transaction_expense', $voucher_no, $expense );
334
335 return $expense;
336 }
337
338 /**
339 * Update a expense
340 *
341 * @param $data
342 * @param $expense_id
343 *
344 * @return mixed
345 */
346 function erp_acct_update_expense( $data, $expense_id ) {
347 global $wpdb;
348
349 if ( $data['convert'] ) {
350 erp_acct_convert_draft_to_expense( $data, $expense_id );
351
352 return;
353 }
354
355 $updated_by = get_current_user_id();
356 $data['updated_at'] = date( 'Y-m-d H:i:s' );
357 $data['updated_by'] = $updated_by;
358
359 try {
360 $wpdb->query( 'START TRANSACTION' );
361
362 $expense_data = erp_acct_get_formatted_expense_data( $data, $expense_id );
363
364 $wpdb->update(
365 $wpdb->prefix . 'erp_acct_expenses',
366 [
367 'people_id' => $expense_data['people_id'],
368 'people_name' => $expense_data['people_name'],
369 'address' => $expense_data['billing_address'],
370 'trn_date' => $expense_data['trn_date'],
371 'amount' => $expense_data['amount'],
372 'ref' => $expense_data['ref'],
373 'check_no' => $expense_data['check_no'],
374 'particulars' => $expense_data['particulars'],
375 'trn_by' => $expense_data['trn_by'],
376 'trn_by_ledger_id' => $expense_data['trn_by_ledger_id'],
377 'attachments' => $expense_data['attachments'],
378 'updated_at' => $expense_data['updated_at'],
379 'updated_by' => $expense_data['updated_by'],
380 ],
381 [
382 'voucher_no' => $expense_id,
383 ]
384 );
385
386 /**
387 *? We can't update `expense_details` directly
388 *? suppose there were 5 detail rows previously
389 *? but on update there may be 2 detail rows
390 *? that's why we can't update because the foreach will iterate only 2 times, not 5 times
391 *? so, remove previous rows and insert new rows
392 */
393 $prev_detail_ids = $wpdb->get_results( $wpdb->prepare( "SELECT id FROM {$wpdb->prefix}erp_acct_expense_details WHERE trn_no = %d", $expense_id ), ARRAY_A );
394 $prev_detail_ids = implode( ',', array_map( 'absint', $prev_detail_ids ) );
395
396 $wpdb->delete( $wpdb->prefix . 'erp_acct_expense_details', [ 'trn_no' => $expense_id ] );
397
398 $items = $expense_data['bill_details'];
399
400 foreach ( $items as $key => $item ) {
401 $wpdb->insert(
402 $wpdb->prefix . 'erp_acct_expense_details',
403 [
404 'ledger_id' => $item['ledger_id'],
405 'particulars' => $item['particulars'],
406 'amount' => $item['amount'],
407 'created_at' => $expense_data['created_at'],
408 'created_by' => $expense_data['created_by'],
409 'updated_at' => $expense_data['updated_at'],
410 'updated_by' => $expense_data['updated_by'],
411 ]
412 );
413 }
414
415 $wpdb->query( 'COMMIT' );
416 } catch ( Exception $e ) {
417 $wpdb->query( 'ROLLBACK' );
418
419 return new WP_error( 'expense-exception', $e->getMessage() );
420 }
421
422 return $expense_id;
423 }
424
425 /**
426 * Convert draft to expense
427 *
428 * @param array $data
429 * @param int $expense_id
430 *
431 * @return array
432 */
433 function erp_acct_convert_draft_to_expense( $data, $expense_id ) {
434 global $wpdb;
435
436 $updated_by = get_current_user_id();
437 $data['updated_at'] = date( 'Y-m-d H:i:s' );
438 $data['updated_by'] = $updated_by;
439
440 try {
441 $wpdb->query( 'START TRANSACTION' );
442
443 $type = 'expense';
444
445 if ( isset( $data['voucher_type'] ) && 'check' === $data['voucher_type'] ) {
446 $type = 'check';
447 }
448
449 $expense_data = erp_acct_get_formatted_expense_data( $data, $expense_id );
450
451 $wpdb->update(
452 $wpdb->prefix . 'erp_acct_expenses',
453 [
454 'people_id' => $expense_data['people_id'],
455 'people_name' => $expense_data['people_name'],
456 'address' => $expense_data['billing_address'],
457 'trn_date' => $expense_data['trn_date'],
458 'amount' => $expense_data['amount'],
459 'ref' => $expense_data['ref'],
460 'check_no' => $expense_data['check_no'],
461 'status' => $expense_data['status'],
462 'particulars' => $expense_data['particulars'],
463 'trn_by' => $expense_data['trn_by'],
464 'trn_by_ledger_id' => $expense_data['trn_by_ledger_id'],
465 'attachments' => $expense_data['attachments'],
466 'updated_at' => $expense_data['updated_at'],
467 'updated_by' => $expense_data['updated_by'],
468 ],
469 [
470 'voucher_no' => $expense_id,
471 ]
472 );
473
474 /**
475 *? We can't update `expense_details` directly
476 *? suppose there were 5 detail rows previously
477 *? but on update there may be 2 detail rows
478 *? that's why we can't update because the foreach will iterate only 2 times, not 5 times
479 *? so, remove previous rows and insert new rows
480 */
481 $prev_detail_ids = $wpdb->get_results( $wpdb->prepare( "SELECT id FROM {$wpdb->prefix}erp_acct_expense_details WHERE trn_no = %d", $expense_id ), ARRAY_A );
482 $prev_detail_ids = implode( ',', array_map( 'absint', $prev_detail_ids ) );
483
484 $wpdb->delete( $wpdb->prefix . 'erp_acct_expense_details', [ 'trn_no' => $expense_id ] );
485
486 $items = $expense_data['bill_details'];
487
488 foreach ( $items as $item ) {
489 $wpdb->insert(
490 $wpdb->prefix . 'erp_acct_expense_details',
491 [
492 'ledger_id' => $item['ledger_id'],
493 'particulars' => $item['particulars'],
494 'trn_no' => $expense_id,
495 'amount' => $item['amount'],
496 'created_at' => $expense_data['created_at'],
497 'created_by' => $expense_data['created_by'],
498 'updated_at' => $expense_data['updated_at'],
499 'updated_by' => $expense_data['updated_by'],
500 ]
501 );
502
503 erp_acct_insert_expense_data_into_ledger( $expense_data, $item );
504 }
505
506 $check = 3;
507
508 if ( $check == $expense_data['trn_by'] ) {
509 erp_acct_insert_check_data( $expense_data );
510 } elseif ( 'check' === $type ) {
511 erp_acct_insert_check_data( $expense_data );
512 }
513
514 if ( 'check' === $type ) {
515 erp_acct_insert_source_expense_data_into_ledger( $expense_data );
516 } elseif ( isset( $expense_data['trn_by'] ) && 4 === $expense_data['trn_by'] ) {
517 do_action( 'erp_acct_expense_people_transaction', $expense_data, $expense_id );
518 } else {
519 //Insert into Ledger for source account
520 erp_acct_insert_source_expense_data_into_ledger( $expense_data );
521 }
522
523 $data['dr'] = 0;
524 $data['cr'] = $expense_data['amount'];
525 erp_acct_insert_data_into_people_trn_details( $data, $expense_id );
526
527 do_action( 'erp_acct_after_expense_create', $expense_data, $expense_id );
528
529 $wpdb->query( 'COMMIT' );
530 } catch ( Exception $e ) {
531 $wpdb->query( 'ROLLBACK' );
532
533 return new WP_error( 'expense-exception', $e->getMessage() );
534 }
535
536 $email = erp_get_people_email( $expense_data['people_id'] );
537
538 if ( 'check' === $type ) {
539 $check = erp_acct_get_check( $expense_id );
540 $check['email'] = $email;
541
542 do_action( 'erp_acct_new_transaction_check', $expense_id, $check );
543
544 return $check;
545 }
546
547 $expense = erp_acct_get_expense( $expense_id );
548 $expense['email'] = $email;
549
550 do_action( 'erp_acct_new_transaction_expense', $expense_id, $expense );
551
552 return $expense;
553 }
554
555 /**
556 * Void a expense
557 *
558 * @param $id
559 *
560 * @return void
561 */
562 function erp_acct_void_expense( $id ) {
563 global $wpdb;
564
565 if ( ! $id ) {
566 return;
567 }
568
569 $wpdb->update(
570 $wpdb->prefix . 'erp_acct_expenses',
571 [
572 'status' => 8,
573 ],
574 [ 'voucher_no' => $id ]
575 );
576
577 $wpdb->delete( $wpdb->prefix . 'erp_acct_ledger_details', [ 'trn_no' => $id ] );
578 $wpdb->delete( $wpdb->prefix . 'erp_acct_expense_details', [ 'trn_no' => $id ] );
579 }
580
581 /**
582 * Get formatted expense data
583 *
584 * @param $data
585 * @param $voucher_no
586 *
587 * @return mixed
588 */
589 function erp_acct_get_formatted_expense_data( $data, $voucher_no ) {
590 $expense_data = [];
591
592 $people = erp_get_people( $data['people_id'] );
593 $company = new \WeDevs\ERP\Company();
594
595 $expense_data['voucher_no'] = ! empty( $voucher_no ) ? $voucher_no : 0;
596 $expense_data['people_id'] = isset( $data['people_id'] ) ? $data['people_id'] : get_current_user_id();
597 $expense_data['people_name'] = isset( $people ) ? $people->first_name . ' ' . $people->last_name : '';
598 $expense_data['billing_address'] = isset( $data['billing_address'] ) ? $data['billing_address'] : '';
599 $expense_data['trn_date'] = isset( $data['trn_date'] ) ? $data['trn_date'] : date( 'Y-m-d' );
600 $expense_data['amount'] = isset( $data['amount'] ) ? $data['amount'] : 0;
601 $expense_data['attachments'] = isset( $data['attachments'] ) ? $data['attachments'] : '';
602 $expense_data['ref'] = isset( $data['ref'] ) ? $data['ref'] : '';
603 $expense_data['check_no'] = isset( $data['check_no'] ) ? $data['check_no'] : null;
604 // translators: %s: voucher_no
605 $expense_data['particulars'] = ! empty( $data['particulars'] ) ? $data['particulars'] : sprintf( __( 'Expense created with voucher no %s', 'erp' ), $voucher_no );
606 $expense_data['bill_details'] = isset( $data['bill_details'] ) ? $data['bill_details'] : '';
607 $expense_data['status'] = isset( $data['status'] ) ? $data['status'] : 1;
608 $expense_data['trn_by_ledger_id'] = isset( $data['trn_by_ledger_id'] ) ? $data['trn_by_ledger_id'] : null;
609 $expense_data['trn_by'] = isset( $data['trn_by'] ) ? $data['trn_by'] : null;
610 $expense_data['created_at'] = date( 'Y-m-d' );
611 $expense_data['created_by'] = isset( $data['created_by'] ) ? $data['created_by'] : '';
612 $expense_data['updated_at'] = isset( $data['updated_at'] ) ? $data['updated_at'] : '';
613 $expense_data['updated_by'] = isset( $data['updated_by'] ) ? $data['updated_by'] : '';
614 $expense_data['pay_to'] = isset( $people ) ? $people->first_name . ' ' . $people->last_name : '';
615 $expense_data['name'] = isset( $data['name'] ) ? $data['name'] : $company->name;
616 $expense_data['bank'] = isset( $data['bank'] ) ? $data['bank'] : '';
617 $expense_data['voucher_type'] = isset( $data['voucher_type'] ) ? $data['voucher_type'] : '';
618
619 return $expense_data;
620 }
621
622 /**
623 * Insert expense/s data into ledger
624 *
625 * @param array $expense_data
626 * @param array $item_data
627 *
628 * @return mixed
629 */
630 function erp_acct_insert_expense_data_into_ledger( $expense_data, $item_data = [] ) {
631 global $wpdb;
632
633 $draft = 1;
634 $people = '4'; // from reimbursement
635
636 if ( $draft === $expense_data['status'] || $people === $expense_data['trn_by'] ) {
637 return;
638 }
639
640 // Insert amount in ledger_details
641 $wpdb->insert(
642 $wpdb->prefix . 'erp_acct_ledger_details',
643 [
644 'ledger_id' => $item_data['ledger_id'],
645 'trn_no' => $expense_data['voucher_no'],
646 'particulars' => $expense_data['particulars'],
647 'debit' => $item_data['amount'],
648 'credit' => 0,
649 'trn_date' => $expense_data['trn_date'],
650 'created_at' => $expense_data['created_at'],
651 'created_by' => $expense_data['created_by'],
652 'updated_at' => $expense_data['updated_at'],
653 'updated_by' => $expense_data['updated_by'],
654 ]
655 );
656 }
657
658 /**
659 * Update expense/s data into ledger
660 *
661 * @param array $expense_data
662 * @param array $expense_no
663 * @param array $item_data
664 *
665 * @return mixed
666 */
667 function erp_acct_update_expense_data_into_ledger( $expense_data, $expense_no, $item_data = [] ) {
668 global $wpdb;
669
670 if ( 1 === $expense_data['status'] && ( isset( $expense_data['trn_by'] ) && 4 === $expense_data['trn_by'] ) ) {
671 return;
672 }
673
674 // Update amount in ledger_details
675 $wpdb->update(
676 $wpdb->prefix . 'erp_acct_ledger_details',
677 [
678 'ledger_id' => $item_data['ledger_id'],
679 'particulars' => $expense_data['particulars'],
680 'debit' => $item_data['amount'],
681 'credit' => 0,
682 'trn_date' => $expense_data['trn_date'],
683 'created_at' => $expense_data['created_at'],
684 'created_by' => $expense_data['created_by'],
685 'updated_at' => $expense_data['updated_at'],
686 'updated_by' => $expense_data['updated_by'],
687 ],
688 [
689 'trn_no' => $expense_no,
690 ]
691 );
692 }
693
694 /**
695 * Insert Expense from account data into ledger
696 *
697 * @param array $expense_data
698 *
699 * @return void
700 */
701 function erp_acct_insert_source_expense_data_into_ledger( $expense_data ) {
702 global $wpdb;
703
704 if ( 1 === $expense_data['status'] && ( isset( $expense_data['trn_by'] ) && 4 === $expense_data['trn_by'] ) ) {
705 return;
706 }
707
708 // Insert amount in ledger_details
709 $wpdb->insert(
710 $wpdb->prefix . 'erp_acct_ledger_details',
711 [
712 'ledger_id' => $expense_data['trn_by_ledger_id'],
713 'trn_no' => $expense_data['voucher_no'],
714 'particulars' => $expense_data['particulars'],
715 'debit' => 0,
716 'credit' => $expense_data['amount'],
717 'trn_date' => $expense_data['trn_date'],
718 'created_at' => $expense_data['created_at'],
719 'created_by' => $expense_data['created_by'],
720 'updated_at' => $expense_data['updated_at'],
721 'updated_by' => $expense_data['updated_by'],
722 ]
723 );
724 }
725
726 /**
727 * Get check data of a expense
728 *
729 * @param $expense_no
730 *
731 * @return mixed
732 */
733 function erp_acct_get_check_data_of_expense( $expense_no ) {
734 global $wpdb;
735
736 $sql = "SELECT
737 cheque.bank,
738 cheque.check_no,
739 cheque.trn_no,
740 cheque.name,
741 cheque.pay_to,
742 cheque.bank,
743 cheque.amount,
744
745 ledg_detail.debit,
746 ledg_detail.credit
747
748 FROM {$wpdb->prefix}erp_acct_expense_checks AS cheque
749 LEFT JOIN {$wpdb->prefix}erp_acct_ledger_details AS ledg_detail ON cheque.trn_no = ledg_detail.trn_no
750
751 WHERE cheque.trn_no = {$expense_no}";
752
753 $row = $wpdb->get_row( $sql, ARRAY_A );
754
755 return $row;
756 }
757