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 / pay-bills.php

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

507 lines 15.9 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 pay_bills
9 *
10 * @param $data
11 *
12 * @return mixed
13 */
14 function erp_acct_get_pay_bills( $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_pay_bill ORDER BY {$args['orderby']} {$args['order']} {$limit}";
37
38 if ( $args['count'] ) {
39 return $wpdb->get_var( $sql );
40 }
41
42 return $wpdb->get_results( $sql, ARRAY_A );
43 }
44
45 /**
46 * Get a pay_bill
47 *
48 * @param $bill_no
49 *
50 * @return mixed
51 */
52 function erp_acct_get_pay_bill( $bill_no ) {
53 global $wpdb;
54
55 $row = $wpdb->get_row(
56 $wpdb->prepare(
57 "SELECT
58 pay_bill.id,
59 pay_bill.voucher_no,
60 pay_bill.vendor_id,
61 pay_bill.vendor_name,
62 pay_bill.trn_date,
63 pay_bill.amount,
64 pay_bill.trn_by,
65 pay_bill.particulars,
66 pay_bill.created_at,
67 pay_bill.attachments,
68 pay_bill.status
69 FROM {$wpdb->prefix}erp_acct_pay_bill AS pay_bill
70 WHERE pay_bill.voucher_no = %d",
71 $bill_no
72 ),
73 ARRAY_A
74 );
75
76 $row['bill_details'] = erp_acct_format_paybill_line_items( $bill_no );
77
78 return $row;
79 }
80
81 /**
82 * Format pay bill line items
83 */
84 function erp_acct_format_paybill_line_items( $voucher_no ) {
85 global $wpdb;
86
87 return $wpdb->get_results(
88 $wpdb->prepare(
89 "SELECT pay_bill_detail.id,
90 pay_bill_detail.voucher_no,
91 pay_bill_detail.bill_no,
92 pay_bill_detail.amount
93 FROM {$wpdb->prefix}erp_acct_pay_bill AS pay_bill
94 LEFT JOIN {$wpdb->prefix}erp_acct_pay_bill_details as pay_bill_detail ON pay_bill.voucher_no = pay_bill_detail.voucher_no
95 WHERE pay_bill.voucher_no = %d",
96 $voucher_no
97 ),
98 ARRAY_A
99 );
100 }
101
102 /**
103 * Insert a pay_bill
104 *
105 * @param $data
106 * @param $pay_bill_id
107 * @param $due
108 *
109 * @return mixed
110 */
111 function erp_acct_insert_pay_bill( $data ) {
112 global $wpdb;
113
114 $created_by = get_current_user_id();
115 $data['created_at'] = date( 'Y-m-d H:i:s' );
116 $data['created_by'] = $created_by;
117 $data['updated_at'] = date( 'Y-m-d H:i:s' );
118 $data['updated_by'] = $created_by;
119
120 $voucher_no = null;
121 $currency = erp_get_currency( true );
122
123 try {
124 $wpdb->query( 'START TRANSACTION' );
125
126 $wpdb->insert(
127 $wpdb->prefix . 'erp_acct_voucher_no',
128 [
129 'type' => 'pay_bill',
130 'currency' => $currency,
131 'created_at' => $data['created_at'],
132 'created_by' => $created_by,
133 'updated_at' => isset( $data['updated_at'] ) ? $data['updated_at'] : '',
134 'updated_by' => isset( $data['updated_by'] ) ? $data['updated_by'] : '',
135 ]
136 );
137
138 $voucher_no = $wpdb->insert_id;
139
140 $pay_bill_data = erp_acct_get_formatted_pay_bill_data( $data, $voucher_no );
141
142 $wpdb->insert(
143 $wpdb->prefix . 'erp_acct_pay_bill',
144 [
145 'voucher_no' => $voucher_no,
146 'trn_date' => $pay_bill_data['trn_date'],
147 'vendor_id' => $pay_bill_data['vendor_id'],
148 'vendor_name' => $pay_bill_data['people_name'],
149 'amount' => $pay_bill_data['amount'],
150 'trn_by' => $pay_bill_data['trn_by'],
151 'trn_by_ledger_id' => $pay_bill_data['trn_by_ledger_id'],
152 'particulars' => $pay_bill_data['particulars'],
153 'attachments' => $pay_bill_data['attachments'],
154 'status' => $pay_bill_data['status'],
155 'created_at' => $pay_bill_data['created_at'],
156 'created_by' => $created_by,
157 'updated_at' => $pay_bill_data['updated_at'],
158 'updated_by' => $pay_bill_data['updated_by'],
159 ]
160 );
161
162 $items = $pay_bill_data['bill_details'];
163
164 foreach ( $items as $key => $item ) {
165 $wpdb->insert(
166 $wpdb->prefix . 'erp_acct_pay_bill_details',
167 [
168 'voucher_no' => $voucher_no,
169 'bill_no' => $item['voucher_no'],
170 'amount' => $item['amount'],
171 'created_at' => $pay_bill_data['created_at'],
172 'created_by' => $pay_bill_data['created_by'],
173 'updated_at' => $pay_bill_data['updated_at'],
174 'updated_by' => $pay_bill_data['updated_by'],
175 ]
176 );
177
178 if ( 1 === $pay_bill_data['status'] ) {
179 $wpdb->query( 'COMMIT' );
180
181 return erp_acct_get_pay_bill( $voucher_no );
182 }
183 }
184
185 foreach ( $items as $key => $item ) {
186 $wpdb->insert(
187 $wpdb->prefix . 'erp_acct_bill_account_details',
188 [
189 'bill_no' => $item['voucher_no'],
190 'trn_no' => $voucher_no,
191 'trn_date' => $pay_bill_data['trn_date'],
192 'particulars' => $pay_bill_data['particulars'],
193 'debit' => $item['amount'],
194 'credit' => 0,
195 'created_at' => $pay_bill_data['created_at'],
196 'created_by' => $pay_bill_data['created_by'],
197 'updated_at' => $pay_bill_data['updated_at'],
198 'updated_by' => $pay_bill_data['updated_by'],
199 ]
200 );
201 }
202
203 erp_acct_insert_pay_bill_data_into_ledger( $pay_bill_data );
204
205 if ( isset( $pay_bill_data['trn_by'] ) && 3 === $pay_bill_data['trn_by'] ) {
206 erp_acct_insert_check_data( $pay_bill_data );
207 }
208
209 $data['dr'] = $pay_bill_data['amount'];
210 $data['cr'] = 0;
211 erp_acct_insert_data_into_people_trn_details( $data, $voucher_no );
212
213 do_action( 'erp_acct_after_pay_bill_create', $pay_bill_data, $voucher_no );
214
215 $wpdb->query( 'COMMIT' );
216 } catch ( Exception $e ) {
217 $wpdb->query( 'ROLLBACK' );
218
219 return new WP_error( 'pay-bill-exception', $e->getMessage() );
220 }
221
222 foreach ( $items as $item ) {
223 erp_acct_change_bill_status( $item['voucher_no'] );
224 }
225
226 $pay_bill = erp_acct_get_pay_bill( $voucher_no );
227
228 $pay_bill['email'] = erp_get_people_email( $data['vendor_id'] );
229
230 do_action( 'erp_acct_new_transaction_pay_bill', $voucher_no, $pay_bill );
231
232 return $pay_bill;
233 }
234
235 /**
236 * Update a pay_bill
237 *
238 * @param $data
239 * @param $pay_bill_id
240 * @param $due
241 *
242 * @return mixed
243 */
244 function erp_acct_update_pay_bill( $data, $pay_bill_id ) {
245 global $wpdb;
246
247 $updated_by = get_current_user_id();
248 $data['updated_at'] = date( 'Y-m-d H:i:s' );
249 $data['updated_by'] = $updated_by;
250
251 try {
252 $wpdb->query( 'START TRANSACTION' );
253
254 $pay_bill_data = erp_acct_get_formatted_pay_bill_data( $data, $pay_bill_id );
255
256 $wpdb->update(
257 $wpdb->prefix . 'erp_acct_pay_bill',
258 [
259 'bill_no' => $pay_bill_data['bill_no'],
260 'trn_date' => $pay_bill_data['trn_date'],
261 'amount' => $pay_bill_data['amount'],
262 'type' => $pay_bill_data['type'],
263 'particulars' => $pay_bill_data['particulars'],
264 'attachments' => $pay_bill_data['attachments'],
265 'status' => $pay_bill_data['status'],
266 'created_at' => $pay_bill_data['created_at'],
267 'created_by' => $pay_bill_data['created_by'],
268 'updated_at' => $pay_bill_data['updated_at'],
269 'updated_by' => $pay_bill_data['updated_by'],
270 ],
271 [
272 'voucher_no' => $pay_bill_id,
273 ]
274 );
275
276 $items = $pay_bill_data['bill_details'];
277
278 foreach ( $items as $key => $item ) {
279 $wpdb->update(
280 $wpdb->prefix . 'erp_acct_pay_bill_details',
281 [
282 'bill_no' => $item['voucher_no'],
283 'amount' => $item['amount'],
284 'created_at' => $pay_bill_data['created_at'],
285 'created_by' => $pay_bill_data['created_by'],
286 'updated_at' => $pay_bill_data['updated_at'],
287 'updated_by' => $pay_bill_data['updated_by'],
288 ],
289 [
290 'voucher_no' => $pay_bill_id,
291 ]
292 );
293
294 $wpdb->update(
295 $wpdb->prefix . 'erp_acct_bill_account_details',
296 [
297 'bill_no' => $item['voucher_no'],
298 'particulars' => $pay_bill_data['particulars'],
299 'debit' => 0,
300 'credit' => $item['amount'],
301 'created_at' => $pay_bill_data['created_at'],
302 'created_by' => $pay_bill_data['created_by'],
303 'updated_at' => $pay_bill_data['updated_at'],
304 'updated_by' => $pay_bill_data['updated_by'],
305 ],
306 [
307 'trn_no' => $pay_bill_id,
308 ]
309 );
310 }
311
312 erp_acct_update_pay_bill_data_into_ledger( $pay_bill_data, $pay_bill_id );
313
314 $wpdb->query( 'COMMIT' );
315 } catch ( Exception $e ) {
316 $wpdb->query( 'ROLLBACK' );
317
318 return new WP_error( 'bill-exception', $e->getMessage() );
319 }
320
321 foreach ( $items as $item ) {
322 erp_acct_change_bill_status( $item['voucher_no'] );
323 }
324
325 return erp_acct_get_pay_bill( $pay_bill_id );
326 }
327
328 /**
329 * Void a pay_bill
330 *
331 * @param $id
332 *
333 * @return void
334 */
335 function erp_acct_void_pay_bill( $id ) {
336 global $wpdb;
337
338 if ( ! $id ) {
339 return;
340 }
341
342 $wpdb->update(
343 $wpdb->prefix . 'erp_acct_pay_bill',
344 [
345 'status' => 8,
346 ],
347 [ 'voucher_no' => $id ]
348 );
349
350 $wpdb->delete( $wpdb->prefix . 'erp_acct_ledger_details', [ 'trn_no' => $id ] );
351 $wpdb->delete( $wpdb->prefix . 'erp_acct_bill_account_details', [ 'trn_no' => $id ] );
352 }
353
354 /**
355 * Get formatted pay_bill data
356 *
357 * @param $data
358 * @param $voucher_no
359 *
360 * @return mixed
361 */
362 function erp_acct_get_formatted_pay_bill_data( $data, $voucher_no ) {
363 $pay_bill_data = [];
364
365 $user_info = erp_get_people( $data['vendor_id'] );
366 $company = new \WeDevs\ERP\Company();
367
368 $pay_bill_data['voucher_no'] = ! empty( $voucher_no ) ? $voucher_no : 0;
369 $pay_bill_data['trn_no'] = ! empty( $voucher_no ) ? $voucher_no : 0;
370 $pay_bill_data['vendor_id'] = isset( $data['vendor_id'] ) ? $data['vendor_id'] : null;
371 $pay_bill_data['people_name'] = isset( $user_info ) ? $user_info->first_name . ' ' . $user_info->last_name : '';
372 $pay_bill_data['trn_date'] = isset( $data['trn_date'] ) ? $data['trn_date'] : date( 'Y-m-d' );
373 $pay_bill_data['amount'] = isset( $data['amount'] ) ? $data['amount'] : 0;
374 $pay_bill_data['ref'] = isset( $data['ref'] ) ? $data['ref'] : 0;
375 $pay_bill_data['trn_by'] = isset( $data['trn_by'] ) ? $data['trn_by'] : 0;
376 // translators: %s: voucher_no
377 $pay_bill_data['particulars'] = ! empty( $data['particulars'] ) ? $data['particulars'] : sprintf( __( 'Bill payment created with voucher no %s', 'erp' ), $voucher_no );
378 $pay_bill_data['attachments'] = isset( $data['attachments'] ) ? $data['attachments'] : '';
379 $pay_bill_data['bill_details'] = isset( $data['bill_details'] ) ? $data['bill_details'] : '';
380 $pay_bill_data['status'] = isset( $data['status'] ) ? $data['status'] : 4;
381 $pay_bill_data['trn_by_ledger_id'] = isset( $data['deposit_to'] ) ? $data['deposit_to'] : null;
382 $pay_bill_data['check_no'] = isset( $data['check_no'] ) ? $data['check_no'] : 0;
383 $pay_bill_data['pay_to'] = isset( $user_info ) ? $user_info->first_name . ' ' . $user_info->last_name : '';
384 $pay_bill_data['name'] = isset( $data['name'] ) ? $data['name'] : $company->name;
385 $pay_bill_data['bank'] = isset( $data['bank'] ) ? $data['bank'] : '';
386 $pay_bill_data['voucher_type'] = isset( $data['voucher_type'] ) ? $data['voucher_type'] : '';
387 $pay_bill_data['created_at'] = date( 'Y-m-d' );
388 $pay_bill_data['created_by'] = isset( $data['created_by'] ) ? $data['created_by'] : '';
389 $pay_bill_data['updated_at'] = isset( $data['updated_at'] ) ? $data['updated_at'] : '';
390 $pay_bill_data['updated_by'] = isset( $data['updated_by'] ) ? $data['updated_by'] : '';
391
392 return $pay_bill_data;
393 }
394
395 /**
396 * Insert pay_bill/s data into ledger
397 *
398 * @param array $pay_bill_data
399 * @param array $item_data
400 *
401 * @return mixed
402 */
403 function erp_acct_insert_pay_bill_data_into_ledger( $pay_bill_data ) {
404 global $wpdb;
405
406 if ( 1 === $pay_bill_data['status'] || ( isset( $pay_bill_data['trn_by'] ) && 4 === $pay_bill_data['trn_by'] ) ) {
407 return;
408 }
409
410 // Insert amount in ledger_details
411 $wpdb->insert(
412 $wpdb->prefix . 'erp_acct_ledger_details',
413 [
414 'ledger_id' => $pay_bill_data['trn_by_ledger_id'],
415 'trn_no' => $pay_bill_data['trn_no'],
416 'particulars' => $pay_bill_data['particulars'],
417 'debit' => 0,
418 'credit' => $pay_bill_data['amount'],
419 'trn_date' => $pay_bill_data['trn_date'],
420 'created_at' => $pay_bill_data['created_at'],
421 'created_by' => $pay_bill_data['created_by'],
422 'updated_at' => $pay_bill_data['updated_at'],
423 'updated_by' => $pay_bill_data['updated_by'],
424 ]
425 );
426 }
427
428 /**
429 * Update pay_bill/s data into ledger
430 *
431 * @param array $pay_bill_data
432 * * @param array $pay_bill_no
433 * @param array $item_data
434 *
435 * @return mixed
436 */
437 function erp_acct_update_pay_bill_data_into_ledger( $pay_bill_data, $pay_bill_no ) {
438 global $wpdb;
439
440 if ( 1 === $pay_bill_data['status'] || ( isset( $pay_bill_data['trn_by'] ) && 4 === $pay_bill_data['trn_by'] ) ) {
441 return;
442 }
443
444 // Update amount in ledger_details
445 $wpdb->update(
446 $wpdb->prefix . 'erp_acct_ledger_details',
447 [
448 'ledger_id' => $pay_bill_data['trn_by_ledger_id'],
449 'particulars' => $pay_bill_data['particulars'],
450 'debit' => 0,
451 'credit' => $pay_bill_data['amount'],
452 'trn_date' => $pay_bill_data['trn_date'],
453 'created_at' => $pay_bill_data['created_at'],
454 'created_by' => $pay_bill_data['created_by'],
455 'updated_at' => $pay_bill_data['updated_at'],
456 'updated_by' => $pay_bill_data['updated_by'],
457 ],
458 [
459 'trn_no' => $pay_bill_no,
460 ]
461 );
462 }
463
464 /**
465 * Get Pay bills count
466 *
467 * @return int
468 */
469 function erp_acct_get_pay_bill_count() {
470 global $wpdb;
471
472 $row = $wpdb->get_row( 'SELECT COUNT(*) as count FROM ' . $wpdb->prefix . 'erp_acct_pay_bill' );
473
474 return $row->count;
475 }
476
477 /**
478 * Update bill status after a payment
479 *
480 * @param $bill_no
481 *
482 * @return void
483 */
484 function erp_acct_change_bill_status( $bill_no ) {
485 global $wpdb;
486
487 $due = erp_acct_get_bill_due( $bill_no );
488
489 if ( 0 == $due ) {
490 $wpdb->update(
491 $wpdb->prefix . 'erp_acct_bills',
492 [
493 'status' => 4,
494 ],
495 [ 'voucher_no' => $bill_no ]
496 );
497 } else {
498 $wpdb->update(
499 $wpdb->prefix . 'erp_acct_bills',
500 [
501 'status' => 5,
502 ],
503 [ 'voucher_no' => $bill_no ]
504 );
505 }
506 }
507