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-purchases.php

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

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