• Namespace
  • Class
  • Tree
  • Deprecated
  • Todo
  • Hooks

Namespaces

  • None
  • SIW
    • Admin
    • API
    • Async
    • Batch
    • Compatibility
    • Data
    • Elements
    • Email
    • External
    • Forms
    • Modules
    • Newsletter
    • Page_Builder
    • Plato
    • Widgets
    • WooCommerce
      • Admin
      • Checkout
      • Email
      • Export
      • Frontend
      • Import

Classes

  • SIW\Admin\Admin
  • SIW\Admin\Admin_Bar
  • SIW\Admin\Notices
  • SIW\Admin\Options_Page
  • SIW\Admin\Properties_Page
  • SIW\Admin\Shortcodes
  • SIW\Admin\User_Columns
  • SIW\Animation
  • SIW\API\Endpoint
  • SIW\API\Newsletter_Subscribe
  • SIW\API\Postcode_Lookup
  • SIW\Assets
  • SIW\Async\Process_Stockphoto_Upload
  • SIW\Async\Request
  • SIW\Attachment
  • SIW\Autoloader
  • SIW\Batch\Count_Workcamps
  • SIW\Batch\Delete_Applications
  • SIW\Batch\Delete_Old_Posts
  • SIW\Batch\Delete_Orphaned_Variations
  • SIW\Batch\Delete_Workcamps
  • SIW\Batch\Job
  • SIW\Batch\Send_Workcamp_Approval_Emails
  • SIW\Batch\Update_Dutch_Workcamps
  • SIW\Batch\Update_Free_Places
  • SIW\Batch\Update_SEO_Noindex
  • SIW\Batch\Update_Taxonomies
  • SIW\Batch\Update_Workcamp_Tariffs
  • SIW\Batch\Update_Workcamp_Visibility
  • SIW\Batch\Update_Workcamps
  • SIW\Bootstrap
  • SIW\Compatibility\Caldera_Forms
  • SIW\Compatibility\Mailpoet
  • SIW\Compatibility\Meta_Box
  • SIW\Compatibility\Password_Protected
  • SIW\Compatibility\Pinnacle_Premium
  • SIW\Compatibility\Plugins
  • SIW\Compatibility\Safe_Redirect_Manager
  • SIW\Compatibility\SiteOrigin_Page_Builder
  • SIW\Compatibility\The_SEO_Framework
  • SIW\Compatibility\UpdraftPlus
  • SIW\Compatibility\WooCommerce
  • SIW\Compatibility\WordPress
  • SIW\Compatibility\WP_Rocket
  • SIW\Compatibility\WP_Sentry_Integration
  • SIW\Compatibility\WPML
  • SIW\CSS
  • SIW\Data\Continent
  • SIW\Data\Country
  • SIW\Data\Currency
  • SIW\Data\Language
  • SIW\Data\Social_Network
  • SIW\Data\Work_Type
  • SIW\Elements
  • SIW\Elements\Accordion
  • SIW\Elements\Carousel
  • SIW\Elements\Chart
  • SIW\Elements\Google_Maps
  • SIW\Elements\Interactive_Map
  • SIW\Elements\Interactive_Map_Destinations
  • SIW\Elements\Interactive_Map_ESC
  • SIW\Elements\Interactive_Map_Netherlands
  • SIW\Elements\Modal
  • SIW\Elements\Pie_Chart
  • SIW\Elements\Tablist
  • SIW\Elements\Taxonomy_Filter
  • SIW\Elements\World_Map
  • SIW\Email\Configuration
  • SIW\Email\Template
  • SIW\External\Exchange_Rates
  • SIW\External\Mailjet
  • SIW\External\Postcode_Lookup
  • SIW\External\Spam_Check
  • SIW\Formatting
  • SIW\Forms
  • SIW\Forms\Form
  • SIW\Forms\Processor_Spam_Check
  • SIW\Head
  • SIW\htaccess
  • SIW\HTML
  • SIW\i18n
  • SIW\Icons
  • SIW\Login
  • SIW\Media_Taxonomies
  • SIW\Modules\Cache_Rebuild
  • SIW\Modules\Cookie_Notice
  • SIW\Modules\Google_Analytics
  • SIW\Modules\Menu_Cart
  • SIW\Modules\Social_Share
  • SIW\Modules\Topbar
  • SIW\Newsletter\Confirmation_Email
  • SIW\Newsletter\Confirmation_Page
  • SIW\Newsletter\Hash
  • SIW\Options
  • SIW\Page_Builder\Animation
  • SIW\Page_Builder\Visibility
  • SIW\Plato\Download_File
  • SIW\Plato\Export
  • SIW\Plato\Export_Application
  • SIW\Plato\Import
  • SIW\Plato\Import_Dutch_Workcamps
  • SIW\Plato\Import_FPL
  • SIW\Plato\Import_Workcamps
  • SIW\Plato\Plato_Interface
  • SIW\Properties
  • SIW\Scheduler
  • SIW\Shortcodes
  • SIW\Update
  • SIW\Upload_Subdir
  • SIW\Util
  • SIW\Widgets
  • SIW\Widgets\Accordion
  • SIW\Widgets\Calendar
  • SIW\Widgets\Carousel
  • SIW\Widgets\Contact
  • SIW\Widgets\CTA
  • SIW\Widgets\Dutch_Projects
  • SIW\Widgets\Features
  • SIW\Widgets\Google_Maps
  • SIW\Widgets\Infobox
  • SIW\Widgets\Map
  • SIW\Widgets\Newsletter
  • SIW\Widgets\Organisation
  • SIW\Widgets\Pie_Chart
  • SIW\Widgets\Quick_Search_Form
  • SIW\Widgets\Quick_Search_Results
  • SIW\Widgets\Quote
  • SIW\Widgets\Tabs
  • SIW\Widgets\Widget
  • SIW\WooCommerce\Admin\Coupon
  • SIW\WooCommerce\Admin\Order
  • SIW\WooCommerce\Admin\Order_Columns
  • SIW\WooCommerce\Admin\Product
  • SIW\WooCommerce\Admin\Product_Columns
  • SIW\WooCommerce\Admin\Stockphoto_Page
  • SIW\WooCommerce\Checkout\Discount
  • SIW\WooCommerce\Checkout\Fields
  • SIW\WooCommerce\Checkout\Form
  • SIW\WooCommerce\Checkout\Newsletter
  • SIW\WooCommerce\Checkout\Terms
  • SIW\WooCommerce\Checkout\Validation
  • SIW\WooCommerce\Email\Customer_On_Hold_Order
  • SIW\WooCommerce\Email\Customer_Processing_Order
  • SIW\WooCommerce\Email\Emails
  • SIW\WooCommerce\Email\New_Order
  • SIW\WooCommerce\Export\Order
  • SIW\WooCommerce\Frontend\Archive
  • SIW\WooCommerce\Frontend\Archive_Header
  • SIW\WooCommerce\Frontend\Product
  • SIW\WooCommerce\Frontend\Product_Tabs
  • SIW\WooCommerce\Import\Product
  • SIW\WooCommerce\Import\Product_Image
  • SIW\WooCommerce\Import\Product_Variations
  • SIW_Content_Type
  • SIW_Content_Type_TM_Country
  • SIW_Post_Type
  • SIW_Post_Type_Agenda
  • SIW_Post_Type_Vacatures
  • SIW_Taxonomy

Functions

  • siw_generate_event_json_ld
  • siw_generate_interactive_map
  • siw_generate_job_json_ld
  • siw_get_board_titles
  • siw_get_continent
  • siw_get_continents
  • siw_get_countries
  • siw_get_country
  • siw_get_currencies
  • siw_get_currency
  • siw_get_data
  • siw_get_data_file_ids
  • siw_get_days
  • siw_get_dutch_provinces
  • siw_get_email_settings
  • siw_get_event_data
  • siw_get_featured_job
  • siw_get_genders
  • siw_get_interactive_maps
  • siw_get_job_data
  • siw_get_language
  • siw_get_language_skill_levels
  • siw_get_languages
  • siw_get_nationalities
  • siw_get_option
  • siw_get_project_types
  • siw_get_social_networks
  • siw_get_testimonial_quote
  • siw_get_testimonial_quote_categories
  • siw_get_upcoming_events
  • siw_get_work_type
  • siw_get_work_types
  • siw_meta
  • siw_newsletter_get_lists
  • siw_newsletter_get_subscriber_count
  • siw_newsletter_send_confirmation_email
  • siw_newsletter_subscribe
  • siw_set_option
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 
<?php

namespace SIW\WooCommerce\Export;

use SIW\Plato\Export_Application as Plato_Export_Application;
use SIW\Properties;

/**
 * Exporteert aanmelding naar Plato
 *
 * @copyright 2019 SIW Internationale Vrijwilligersprojecten
 * @since     3.0.0
 */
class Order {

    /**
     * Aantal gefaalde geexporteerde aanmeldingen
     *
     * @var int
     */
    protected $failed_count = 0;

    /**
     * Aantal succesvol geexporteerde aanmeldingen
     *
     * @var int
     */
    protected $success_count = 0;

    /**
     * Init
     */
    public static function init() {
        $self = new self();
        add_filter( 'woocommerce_order_actions', [ $self, 'add_order_action'] );
        add_action( 'woocommerce_order_action_siw_export_to_plato', [ $self, 'export_order'] );
        add_action( 'woocommerce_order_status_processing', [ $self, 'export_order'] );
    }

    /**
     * Voeg orderactie voor export naar Plato toe
     *
     * @param array $actions
     * @return array
     */
    public function add_order_action( array $actions ) {
        global $theorder;
        if ( $theorder->is_paid() ) {
            $actions['siw_export_to_plato'] = __( 'Exporteer naar PLATO', 'siw' );
        }
        return $actions;
    }

    /**
     * Exporteert aanmelding naar plato
     *
     * @param int|\WC_Order $order_id
     */
    function export_order( $order ) {

        if ( ! is_object( $order ) ) {
            $order = new \WC_Order( $order );
        }
    
        /* Haal velden voor aanmelding op */
        $order_data = $this->get_order_data( $order );
    
        /* Elk project per aanmelding apart exporteren. */
        foreach ( $order->get_items() as $item_id => $item_data ) {
            $product = $order->get_product_from_item( $item_data ); //TODO: check of product nog bestaat TODO:deprecated
            $result = $this->export_application( $order_data, $product );
            $order->add_order_note( $result['message'] );
        }
    
        /* Resultaat opslaan bij aanmelding */
        if ( 0 != $this->failed_count ) {
            $order->update_meta_data( '_exported_to_plato', 'failed' );
            $order->save();
        }
        elseif ( 0 != $this->success_count ) {
            $order->update_meta_data( '_exported_to_plato', 'success' );
            $order->save();
        }
    }
    
    /**
     * Exporteert aanmelding voor 1 project naar Plato
     *
     * @param array $order_data
     * @param array $product
     * @return array
     */
    protected function export_application( $order_data, $product ) {
        
        $projectcode = $product->get_sku();
        $order_data['choice1'] = $projectcode;
        $export = new Plato_Export_Application;
        $result = $export->run( $order_data );

        if ( true == $result['success'] ) {
            $this->success_count++;
        }
        else {
            $this->failed_count++;
        }
        return $result;
    }

    /**
     * Genereert array met gegevens aanmelding voor export-xml
     *
     * @param \WC_Order $order Aanmelding
     * @return array
     * 
     * @todo country en occupation uit order halen/uitvragen
     */
    protected function get_order_data( \WC_Order $order ) {
        return [
            'firstname'         => $order->get_billing_first_name(),
            'lastname'          => $order->get_billing_last_name(),
            'sex'               => $order->get_meta( '_billing_gender' ),
            'birthdate'         => date( 'Y-m-d', strtotime( $order->get_meta( '_billing_dob' ) ) ),
            'email'             => $order->get_billing_country(),
            'nationality'       => $order->get_meta( '_billing_nationality' ),
            'telephone'         => $order->get_billing_phone(),
            'address1'          => sprintf( '%s %s', $order->get_billing_address_1(), $order->get_meta( '_billing_housenumber' ) ),
            'zip'               => $order->get_billing_postcode(),
            'city'              => $order->get_billing_city(),
            'country'           => 'NLD',
            'occupation'        => 'OTH',
            'emergency_contact' => sprintf( '%s %s', $order->get_meta( 'emergencyContactName' ), $order->get_meta( 'emergencyContactPhone' ) ),
            'language1'         => $order->get_meta( 'language1' ),
            'language2'         => $order->get_meta( 'language2' ),
            'language3'         => $order->get_meta( 'language3' ),
            'langlevel1'        => $order->get_meta( 'language1Skill' ),
            'langlevel2'        => $order->get_meta( 'language2Skill' ),
            'langlevel3'        => $order->get_meta( 'language3Skill' ),
            'special_needs'     => $order->get_meta( 'healthIssues' ),
            'experience'        => $order->get_meta( 'volunteerExperience' ),
            'motivation'        => $order->get_meta( 'motivation' ),
            'together_with'     => $order->get_meta( 'togetherWith' ),
            'req_sent_by'       => Properties::NAME,
            'req_sender_email'  => Properties::EMAIL,
            'date_filed'        => date( 'Y-m-d' ),
        ];
    }
}
SIW API documentation generated by ApiGen