palsushobhan

WCFM-regenerate-store-invoice

Oct 13th, 2024
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 11.89 KB | None | 0 0
  1. function invoice_regeration_required($order) {
  2.     if( wcfm_is_vendor() ) return false;
  3.     $current_order_status = apply_filters( 'wcfm_current_order_status', $order->get_status(), $order->get_id() );
  4.     if( in_array( $current_order_status, apply_filters( 'wcfm_pdf_invoice_download_disable_order_status', array( 'failed', 'cancelled', 'request', 'proposal', 'proposal-sent', 'proposal-expired', 'proposal-rejected', 'proposal-canceled', 'proposal-accepted' ) ) ) )
  5.         return false;
  6.     if( get_post_type( $order->get_id() ) == 'wc_booking' && isset($order->order) )
  7.         return false;
  8.     return true;
  9. }
  10. add_action( 'wp_ajax_wcfm_regenerate_store_invoice', function() {
  11.     global $WCFM, $WCFMu, $order, $order_id, $document, $document_type, $vendor_id, $process_item_ids, $process_product_ids, $process_shipping_items, $wcfm_vendor_invoice_id;
  12.     $order_id = $_POST['order_id'];
  13.     if($order_id) {
  14.         // $order_posted = get_post( $order_id );
  15.         $order = wc_get_order( $order_id );
  16.         $wcfm_store_invoices = array();
  17.         $wcfm_store_invoice_ids = array();
  18.         // Reset Site Language to Current Langugae
  19.         if ( defined( 'ICL_SITEPRESS_VERSION' ) && ! ICL_PLUGIN_INACTIVE && class_exists( 'SitePress' ) ) {
  20.             global $sitepress;
  21.             $lang = get_post_meta( $order_id, 'wpml_language', true );
  22.             if( !empty( $lang ) ) {
  23.                 $sitepress->switch_lang( $lang, true );
  24.             }
  25.         }
  26.         WPO_WCPDF()->translations();
  27.         $document_type = 'invoice';
  28.         $document = wcpdf_get_document( $document_type, (array) $order_id, true );
  29.         if( !$document ) return;
  30.        
  31.         do_action( 'wpo_wcpdf_before_pdf', $document_type, $document );
  32.        
  33.         $upload_dir = wp_upload_dir();
  34.         if (!empty($upload_dir['error'])) {
  35.             $tmp_path = false;
  36.         } else {
  37.             $upload_base = trailingslashit( $upload_dir['basedir'] );
  38.             $tmp_path = $upload_base . 'wcfm/vendor_invoice/';
  39.         }
  40.  
  41.         $tmp_path = apply_filters( 'wcfm_vendor_invoice_tmp_path', $tmp_path );
  42.         $error = '';
  43.         if ($tmp_path !== false) {
  44.             $tmp_path = trailingslashit( $tmp_path );
  45.             if ( !wp_mkdir_p( $tmp_path ) ) {
  46.                 $error = 'Fail to create upload directory';
  47.             }
  48.         } else {
  49.             $error = 'Invalid invoice path. Can\'t save';
  50.         }
  51.        
  52.         if(!$error) {
  53.             $invoice_settings = array(
  54.                 'paper_size'        => 'A4',
  55.                 'paper_orientation' => 'portrait',
  56.             );
  57.        
  58.             $cur_year  = date('Y');
  59.             $cur_month = date('m');
  60.            
  61.             $wcfm_store_invoice_items = array();
  62.             $line_items               = $order->get_items( 'line_item' );
  63.             $line_items_shipping      = $order->get_items( 'shipping' );
  64.             $processed_item_vendor    = array();
  65.        
  66.             if( !empty( $line_items ) ) {
  67.                 foreach ( $line_items as $item_id => $item ) {
  68.                     // $product  = $item->get_product();
  69.                     $product_id = $item->get_product_id();
  70.                     $vendor_id = wcfm_get_vendor_id_by_post( $product_id );
  71.                     if( !wcfm_is_vendor( $vendor_id ) ) continue;
  72.                     if( in_array( $vendor_id, $processed_item_vendor ) ) continue;
  73.                    
  74.                     if( $vendor_id && $WCFM->wcfm_vendor_support->wcfm_vendor_has_capability( $vendor_id, 'store_invoice' ) ) {
  75.                         if( !empty( $wcfm_store_invoices ) && isset( $wcfm_store_invoices[$vendor_id] ) && !empty( $wcfm_store_invoices[$vendor_id] ) && !is_array( $wcfm_store_invoices[$vendor_id] ) ) {
  76.                             $pdf_path = $wcfm_store_invoices[$vendor_id];
  77.                             if( file_exists( $pdf_path ) ) {
  78.                                 $attachments[] = $pdf_path;
  79.                                 $processed_item_vendor[$vendor_id] = $vendor_id;
  80.                             } else {
  81.                                 $wcfm_store_invoice_items[$vendor_id]['items'][] = $item_id;
  82.                                 $wcfm_store_invoice_items[$vendor_id]['products'][] = $product_id;
  83.                             }
  84.                         } else {
  85.                             $wcfm_store_invoice_items[$vendor_id]['items'][] = $item_id;
  86.                             $wcfm_store_invoice_items[$vendor_id]['products'][] = $product_id;
  87.                         }
  88.                     }
  89.                 }
  90.             }
  91.            
  92.        
  93.             if( !empty( $wcfm_store_invoice_items ) ) {
  94.                 foreach( $wcfm_store_invoice_items as $wcfm_store_invoice_item_key => $wcfm_store_invoice_item ) {
  95.                     $vendor_id             = $wcfm_store_invoice_item_key;
  96.                     $process_item_ids      = $wcfm_store_invoice_item['items'];
  97.                     $process_product_ids   = $wcfm_store_invoice_item['products'];
  98.                     $process_shipping_items = array();
  99.                    
  100.                     if( !empty( $line_items_shipping ) ) {
  101.                         foreach ( $line_items_shipping as $shipping_item_id => $shipping_item) {
  102.                             $order_item_shipping = new WC_Order_Item_Shipping($shipping_item_id);
  103.                             $shipping_vendor_id = $order_item_shipping->get_meta('vendor_id', true);
  104.                             if( $shipping_vendor_id && ( $shipping_vendor_id == $vendor_id ) ) {
  105.                                 $process_shipping_items[$shipping_item_id] = $shipping_item;
  106.                             }
  107.                         }
  108.                     }
  109.                    
  110.                     if( !$process_item_ids || !is_array( $process_item_ids ) || empty( $process_item_ids ) ) continue;
  111.                     if( !$process_product_ids || !is_array( $process_product_ids ) || empty( $process_product_ids ) ) continue;
  112.                    
  113.                     $store_invoice_path = $tmp_path . md5($vendor_id) . '/' . $cur_year . '/' . $cur_month . '/' . md5($order_id);
  114.                     if ( !wp_mkdir_p( $store_invoice_path ) ) {
  115.                         continue;
  116.                     } else {
  117.                         $store_invoice_path = trailingslashit( $store_invoice_path );
  118.                     }
  119.                    
  120.                     $wcfm_vendor_invoice_data = (array) wcfm_get_user_meta( $vendor_id, 'wcfm_vendor_invoice_options', true );
  121.                     $wcfm_vendor_last_invoice_no = get_user_meta( $vendor_id, '_wcfm_vendor_last_invoice_no', true );
  122.                     if( $wcfm_vendor_last_invoice_no ) $wcfm_vendor_last_invoice_no = absint( $wcfm_vendor_last_invoice_no );
  123.                     else $wcfm_vendor_last_invoice_no = 0;
  124.                     $wcfm_vendor_last_invoice_no++;
  125.                     $wcfm_vendor_invoice_prefix = isset( $wcfm_vendor_invoice_data['prefix'] ) ? $wcfm_vendor_invoice_data['prefix'] : '';
  126.                     $wcfm_vendor_invoice_sufix = isset( $wcfm_vendor_invoice_data['sufix'] ) ? $wcfm_vendor_invoice_data['sufix'] : '';
  127.                     $wcfm_vendor_invoice_digit = isset( $wcfm_vendor_invoice_data['digit'] ) ? absint($wcfm_vendor_invoice_data['digit']) : '';
  128.                     if( $wcfm_vendor_invoice_digit ) {
  129.                         $wcfm_vendor_invoice_id = sprintf( '%0'.$wcfm_vendor_invoice_digit.'u', $wcfm_vendor_last_invoice_no );
  130.                     } else {
  131.                         $wcfm_vendor_invoice_id = sprintf( '%06u', $wcfm_vendor_last_invoice_no );
  132.                     }
  133.                     $wcfm_vendor_invoice_id = $wcfm_vendor_invoice_prefix . $wcfm_vendor_invoice_id . $wcfm_vendor_invoice_sufix;
  134.                    
  135.                     $filename = __( 'invoice', 'wc-frontend-manager-ultimate' ) . '-' . $wcfm_vendor_invoice_id . '.pdf';
  136.                        
  137.                     try {
  138.                         // Fetching Main template
  139.                         if( is_rtl() ) {
  140.                             $template = $WCFMu->template->locate_template( 'vendor_invoice/store-invoice-rtl.php' );
  141.                         } else {
  142.                             $template = $WCFMu->template->locate_template( 'vendor_invoice/store-invoice.php' );
  143.                         }
  144.                         ob_start();
  145.                         if (file_exists($template)) {
  146.                             include($template);
  147.                         }
  148.                         $output_body = ob_get_clean();
  149.                
  150.                         // Fetching tempplate wrapper
  151.                         $template_wrapper = $WCFMu->template->locate_template( 'vendor_invoice/html-document-wrapper.php' );
  152.                         ob_start();
  153.                         if (file_exists($template_wrapper)) {
  154.                             include($template_wrapper);
  155.                         }
  156.                         $complete_document = ob_get_clean();
  157.                        
  158.                         // Try to clean up a bit of memory
  159.                         unset($output_body);
  160.                        
  161.                         // clean up special characters
  162.                         $complete_document = utf8_decode(mb_convert_encoding($complete_document, 'HTML-ENTITIES', 'UTF-8'));
  163.                        
  164.                         $pdf_maker = wcpdf_get_pdf_maker( $complete_document, $invoice_settings );
  165.                         $pdf_data = $pdf_maker->output();
  166.                        
  167.                         do_action( 'wpo_wcpdf_after_pdf', $document_type, $document );
  168.                        
  169.                         $pdf_path = $store_invoice_path . $filename;
  170.                         file_put_contents ( $pdf_path, $pdf_data );
  171.                         $attachments[] = $pdf_path;
  172.                         $wcfm_store_invoices[$vendor_id] = esc_sql($pdf_path);
  173.                         $wcfm_store_invoice_ids[$vendor_id] = $wcfm_vendor_invoice_id;
  174.                         update_user_meta( $vendor_id, '_wcfm_vendor_last_invoice_no', $wcfm_vendor_last_invoice_no );
  175.                        
  176.                         // Try to clean up a bit of memory
  177.                         unset($complete_document);
  178.                     } catch (Exception $e) {
  179.                         error_log($e->getMessage());
  180.                         continue;
  181.                     }
  182.                 }
  183.                 update_post_meta( $order_id, '_wcfm_store_invoices', $wcfm_store_invoices );
  184.                 update_post_meta( $order_id, '_wcfm_store_invoice_ids', $wcfm_store_invoice_ids );
  185.             }
  186.         }
  187.     }
  188.     die;
  189. });
  190. add_action( 'wcfm_order_details_after_order_table', function( $order ) {
  191.     if( invoice_regeration_required($order) ) {
  192.         echo '<a id="wcfm-order-store-invoice-' . $order->get_id() . '" data-order="' . $order->get_id() . '" href="#" class="wcfm_regenerate_store_invoice add_new_wcfm_ele_dashboard text_tip" style="float:left!important;color:#ffffff!important;margin-right:10px;" data-tip="' . __('Click to regenarate store invoice') . '"><span class="">' . __( 'Regenerate Store Invoice', 'wc-frontend-manager-ultimate') . '</span></a>';
  193.         echo '<div class="wcfm_clearfix"></div><br />';
  194.     ?>
  195.     <script>
  196.     jQuery(document).ready(function($) {
  197.         $('.wcfm_regenerate_store_invoice').click(function( event ) {
  198.             event.preventDefault();
  199.             var rconfirm = confirm( "Do you really want to do this?" );
  200.             if( rconfirm ) {
  201.                 var data = {
  202.                     action : 'wcfm_regenerate_store_invoice',
  203.                     order_id : $('.wcfm_regenerate_store_invoice').data('order')
  204.                 }
  205.                 $.ajax({
  206.                     type: 'POST',
  207.                     url: wcfm_params.ajax_url,
  208.                     data: data,
  209.                     success: function(response) {
  210.                         console.log(response);
  211.                        window.location = window.location.href;
  212.                     }
  213.                 });
  214.             }
  215.             return false;
  216.         });
  217.     });
  218.     </script>
  219.     <?php
  220.     }
  221. }, 501 );
Add Comment
Please, Sign In to add comment