File "woocommerce-bsalev2.php"

Full path: /home/dora/public_html/wp-content/plugins/woocommerce-bsalev2/woocommerce-bsalev2.php
File size: 17.84 KB
MIME-type: --
Charset: utf-8

<?php
/**
 * Plugin Name: Woocommerce Bsale V2
 * Plugin URI: https://codificando.cl/www/bsale-woocommerce/
 * Description: Integración de Woocommerce con Bsale para sincronizar inventario y facturación (boletas, facturas, notas de venta)
 * Version: 7.1.8
 * Author: Jason Matamala Gajardo
 * Author URI: https://codificando.cl
 * License: GPL2
 * 
 * WC requires at least: 5.0
 * WC tested up to: 7.7.0
 */
//no direct access allowed
defined('ABSPATH') or die('No script kiddies please!');
define('BSALE_OPTIONS_GROUP', 'bsaleoption-group');
define('BSALE_WOOC_URL', plugin_dir_url(__FILE__));

//versin de la tabla de la db
global $woo_bsale_db_version;
$woo_bsale_db_version = '2.1';

global $woo_bsale_db_url;
$woo_bsale_db_url = plugin_dir_url(__FILE__);

global $woo_bsale_db_path;
$woo_bsale_db_path = plugin_dir_path(__FILE__);

function bsale_wc_woocommerce_disabled_notice()
{
    ?>
    <div class="notice notice-error">
        <p>Woocommerce está desactivado. El plugin <strong>Woocomerce Bsale V2</strong> no podrá funcionar hasta que se active woocommerce.</p>
    </div>
    <?php
}

//check woocomerce is active
if( !in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins'))) )
{
    add_action('admin_notices', 'bsale_wc_woocommerce_disabled_notice');
    return;
}

/**
 * crea tablas
 * @global <type> $wpdb
 * @global string $woo_bsale_db_version
 */
function woo_bsale_install($delete_old_table = false)
{
    error_reporting(E_ALL);
    ini_set('display_errors', 1);

    global $woo_bsale_db_version;
    add_option('woo_bsale_db_version', $woo_bsale_db_version);

    require_once dirname(__FILE__) . '/lib/Autoload.php';
    require_once dirname(__FILE__) . '/lib/db/OCDB.class.php';
    require_once dirname(__FILE__) . '/lib/wp/CronFunctions.class.php';

    $OCDB = new OCDB();

    $OCDB->setupTables();

    //cronjobs
    //cronjobs. Solo para test
    // $cron = new CronFunctions();
    //esta función solo debe ser llamada una vez
    // $cron->setup_cronjob_actions();
    //die(__FUNCTION__);
}

function woo_bsale_deactivate()
{
    /* require_once dirname(__FILE__) . '/lib/Autoload.php';
      require_once dirname(__FILE__) . '/lib/wp/CronFunctions.class.php';

      $cron = new CronFunctions();
      $cron->remove_cronjob_actions(); */
}

//hooks  para que se llamen las funciones al activar el plugin
register_activation_hook(__FILE__, 'woo_bsale_install');
register_deactivation_hook(__FILE__, 'woo_bsale_deactivate');

/**
 * para saber si hay que upgradear la db
 * @global <type> $jal_db_version
 */
function woo_bsale_update_db_check()
{
    global $woo_bsale_db_version;
    // if( get_site_option('woo_bsale_db_version') != $woo_bsale_db_version )
    //  {
    woo_bsale_install(true);
    //  }
}

//add_action('plugins_loaded', 'woo_bsale_update_db_check');
//actualización de plugin
add_action('upgrader_process_complete', 'woo_bsale_upgrade_function', 10, 2);

function woo_bsale_upgrade_function($upgrader_object, $options)
{
    $current_plugin_path_name = plugin_basename(__FILE__);

    if( !isset($options['action']) || !isset($options['type']) || !isset($options['plugins']) )
    {
        return;
    }

    if( $options['action'] == 'update' && $options['type'] == 'plugin' )
    {
        foreach( $options['plugins'] as $each_plugin )
        {
            if( $each_plugin == $current_plugin_path_name )
            {
                woo_bsale_install();
            }
        }
    }
}

/* * *
 * creo admin page para importar los miembros del partido
 *
 *
 */

add_action('admin_menu', 'woo_bsale_admin_menu');

/** Step 1. */
function woo_bsale_admin_menu()
{
    if( is_admin() )
    { // admin actions
        // Add the new admin menu and page and save the returned hook suffix
        $hook_suffix = add_management_page('Woocommerce Bsale', 'Woocommerce Bsale', 'publish_posts', 'woo_bsale-admin-menu', 'woo_bsale_admin_options');

        add_action('admin_init', 'bsale_register_mysettings');
    }
    else
    {
        // non-admin enqueues, actions, and filters
    }
}

function bsale_register_mysettings()
{
    $args_intval = array(
        'sanitize_callback' => 'intval',
    );
    $args_text_field = array(
        'sanitize_callback' => 'sanitize_text_field',
    );
    //register_setting(BSALE_OPTIONS_GROUP, 'bsale_categorias_id', 'bsale_sanitize');
    register_setting(BSALE_OPTIONS_GROUP, 'bsale_limit_stock', $args_intval);

    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_days_delete_logs', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_table_delete_logs', $args_intval);

    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_token', $args_text_field);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_sku_envio', $args_text_field);

    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_valor_iva', $args_text_field);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_pais', $args_text_field);

    //skus to skip
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_skus_prefix_to_skip', $args_text_field);

    //estados para nv
    //old register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_estados_nv');

    $args_nv = array(
        'type' => 'array',
        'sanitize_callback' => 'bsale_sanitize_order_statuses',
        'default' => NULL,
    );
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_estados_nv', $args_nv);

    $args_dte = array(
        'type' => 'array',
        'sanitize_callback' => 'bsale_sanitize_order_statuses',
        'default' => NULL,
    );
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_estados_dte', $args_dte);

    $args_nc = array(
        'type' => 'array',
        'sanitize_callback' => 'bsale_sanitize_order_statuses',
        'default' => NULL,
    );
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_estado_dte_cancelled', $args_nc);

    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_payments_nv', $args_text_field);

    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_stock_por_sucursal', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_stock_por_sucursal_place');
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_declare_sii', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_edit_facturac_data', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_only_prods_bsale', $args_intval);
    //checkout fields
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_add_campos_boleta', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_add_campos_factura', $args_intval);

    //inventario
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_create_prods', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_update_stock', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_update_price', $args_intval);
    //check stock after add product to cart
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_sync_stock_on_cart_add', $args_intval);

    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_incluir_despacho_en_dte', $args_intval);
    //register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_descontar_iva_precios', $args_intval);
    //register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_descontar_iva_envios', $args_intval);
    //anular dtes    
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_anular_dtes_cancelled', $args_intval);

    //emitir boleta segun comuna de facturacion?
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_comuna_sucursal_option', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_comuna_sucursal_listado');

    //enable integraciones
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_enable_inventario', $args_intval);

    //mover stock
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_mover_stock', $args_intval);

    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_enable_facturacion', $args_intval);

    //casa ma triz y lista de precios
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_casa_matriz_id', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_lista_precios_id', $args_intval);
    //seller id    
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_seller_id', $args_intval);

    //lp oferta
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_sync_precios_oferta', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_lista_precios_oferta_id', $args_intval);

    //despachos
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_despachar_boleta', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_despachar_factura', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_despachar_gd', $args_intval);

    //facturacion
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_send_email', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_send_sku', $args_intval);
    //atrib dinamicos
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_dinam_attr_boleta', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_dinam_attr_factura', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_dinam_attr_nv', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_dinam_attr_gd', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_dinam_attr_nc', $args_intval);

    //customer notes d.trr
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_dattr_boleta_customer_notes', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_dattr_factura_customer_notes', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_dattr_nv_customer_notes', $args_intval);

    //id docs
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_boleta_id', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_factura_id', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_nv_id', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_gd_id', $args_intval);
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_nc_id', $args_intval);

    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_stock_por_sucursal_back', $args_text_field);

    $args = array(
        'type' => 'array',
        'sanitize_callback' => 'bsale_sanitize_bsale_sucursales_stock',
        'default' => NULL,
    );
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_sucursales_stock', $args);

    $args2 = array(
        'type' => 'array',
        'sanitize_callback' => 'bsale_sanitize_wc_bsale_product_types_stock',
        'default' => NULL,
    );
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_product_types_stock', $args2);

    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_estados_enabled');
    //pagos wc->pagos bsale
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_pagos_bsale');

    //bsale redirects urls
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_redirect_url');

    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_shipping_bsale');
    register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_shipping_filter_stock');

    //datos cliente para gd cuando se mueva stock
    /*  register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_cliente_gd_code', $args_text_field);
      register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_cliente_gd_company', $args_text_field);
      register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_cliente_gd_address', $args_text_field);
      register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_cliente_gd_city', $args_text_field);
      register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_cliente_gd_municipality', $args_text_field);
      register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_cliente_gd_activity', $args_text_field);
      register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_cliente_gd_email', $args_text_field);
      register_setting(BSALE_OPTIONS_GROUP, 'wc_bsale_cliente_gd_phone', $args_text_field); */

    //recargo datos dede bsale si el token ha sido cambiado
    $old_token = get_option('wc_bsale_token');

    $new_token = isset($_REQUEST['wc_bsale_token']) ? $_REQUEST['wc_bsale_token'] : null;

    if( $new_token && $new_token !== $old_token )
    {
        //al llamar a este método aún no se actualizan los datos hasta que este termine de ejecutarse
        update_option('wc_bsale_token', $new_token);

        $config = new ConfigUtils();
        $config->reload_data_from_bsale('all', -1);
    }
}

function bsale_sanitize_bsale_sucursales_stock($input)
{
    if( !is_array($input) )
    {
        return '';
    }
    //print_r($input);

    $str = implode(',', $input);
    //die($str); 
    return $str;
}

function bsale_sanitize_order_statuses($input)
{
    if( !is_array($input) )
    {
        return '';
    }
    //print_r($input);

    $str = implode(',', $input);
    //saco espacios en blanco
    $str = str_replace(' ', '', $str);
    //die($str); 
    return $str;
}

function bsale_sanitize_wc_bsale_product_types_stock($input)
{
    if( !is_array($input) )
    {
        return '';
    }

    $str = implode(',', $input);
    //die($str); 
    return $str;
}

/**
 * sanitixa valores antes de guardarlos en option
 * @param type $input
 * @return type
 */
function bsale_sanitize($input)
{
    $new_input = array();
    $arraux = explode(',', $input);

    //solo acepto un array de numeros 
    foreach( $arraux as $a )
    {
        $n = trim($a);
        if( empty($n) )
        {
            continue;
        }
        $n = intval($n);
        if( $n == 0 )
        {
            continue;
        }

        $new_input[] = $n;
    }
    //saco duplicados
    $new_input = array_unique($new_input);

    $str = implode(',', $new_input);
    return $str;
}

/** Step 3. */
function woo_bsale_admin_options()
{
    //manage_options
    if( !current_user_can('publish_posts') )
    {
        wp_die(__('You do not have sufficient permissions to access this page.'));
    }
//    require_once dirname(__FILE__) . '/lib/wp/WpBsale.class.php';


    if( isset($_GET['settings-updated']) )
    {
        $msg = '<div id="message" class="updated fade"><p><strong>Los cambios se han guardado correctamente.</strong></p></div>';
    }
    else
    {
        $msg = '';
    }

    require_once dirname(__FILE__) . '/wc_tabs/css.php';

    $tab_to_display = isset($_GET['bsale_tab']) ? $_GET['bsale_tab'] : 'bsale_config';
    ?>

    <div class="wrap bsale_wooc">
        <ul class="bsale_tabs">
            <li class="<?php echo($tab_to_display === 'bsale_config' ? 'sel_tab' : '' ); ?>"><a href="tools.php?page=woo_bsale-admin-menu&bsale_tab=bsale_config">Configurar</a></li> 
            <?php if( Funciones::is_enabled_integ_inventario() ): ?>
                <li class="<?php echo($tab_to_display === 'bsale_sync' ? 'sel_tab' : '' ); ?>"><a href="tools.php?page=woo_bsale-admin-menu&bsale_tab=bsale_sync">Sincronizar productos</a></li>
            <?php endif; ?>
            <?php if( $tab_to_display === 'test' ): ?>
                <li class="<?php echo($tab_to_display === 'test' ? 'sel_tab' : '' ); ?>"><a href="tools.php?page=woo_bsale-admin-menu&bsale_tab=test">Test</a></li>
            <?php endif; ?>
            <!--            <li><a href="tools.php?page=woo_bsale-admin-menu&bsale_tab=bsale_help">Ayuda</a></li>-->
        </ul>
        <?php echo $msg; ?>
        <?php
        if( empty($tab_to_display) || $tab_to_display === 'bsale_config' )
        {
            $file = dirname(__FILE__) . '/wc_tabs/config.php';
        }
        elseif( $tab_to_display === 'bsale_sync' )
        {
            $file = dirname(__FILE__) . '/wc_tabs/sync_prods.php';
        }
        elseif( $tab_to_display === 'bsale_xxx' )
        {
            $file = dirname(__FILE__) . '/wc_tabs/bsale_help.php';
        }
        elseif( $tab_to_display === 'test' )
        {
            $file = dirname(__FILE__) . '/wc_tabs/test_page.php';
        }

        if( !empty($file) )
        {
            require_once($file );
        }
        ?>
    </div>

    <?php
}

/**
 * carga scripts para validar
 * @param type $hook
 */
function woo_bsale_my_load_scripts()
{
    global $wp;
    $include = /* is_cart() || */ is_checkout();

    if( Funciones::is_enabled_integ_facturacion() == true && $include )
    {
        wp_enqueue_script('jquery');

        if( Funciones::get_pais() === 'CL' )
        {
            wp_enqueue_script('jquery-rut', plugins_url('js/jquery.Rut.js', __FILE__), array( 'jquery' ), '0.1.1');
            wp_enqueue_script('valida-rut', plugins_url('js/valida_rut.js', __FILE__), array( 'jquery' ), '0.5.1');
            //wp_enqueue_script('datable', plugins_url('js/datable.js', __FILE__), array( 'jquery' ), '0.5');
        }
        elseif( Funciones::get_pais() === 'PE' )
        {
            wp_enqueue_script('valida-dni', plugins_url('js/valida_dni.js', __FILE__), array( 'jquery' ), '0.4.1');
        }
    }
    if( Funciones::is_enabled_integ_inventario() && Funciones::is_mostrar_stock_sucursal() )
    {
        //css con diseño para stock sucursales in page prod
        wp_enqueue_style('bsale-stock', plugins_url('css/bsale_front.css', __FILE__), false, '1.2.1', 'all');
        wp_enqueue_script('bsale-front', plugins_url('js/bsale_front.js', __FILE__), array( 'jquery' ), '0.8.1');
    }

    //wp_register_style('my_css', plugins_url('style.css', __FILE__), false, $my_css_ver);
    // wp_enqueue_style('my_css');
}

add_action('wp_enqueue_scripts', 'woo_bsale_my_load_scripts');

function woo_bsale_my_load_scripts_admin($hook)
{
    wp_enqueue_script('jquery-bsale_admin', plugins_url('js/bsale_admin.js', __FILE__), array( 'jquery' ), '1.8.4', true);
}

add_action('admin_enqueue_scripts', 'woo_bsale_my_load_scripts_admin');

/* add_filter('woocommerce_billing_fields', 'bsale_require_checkout_fields', 999);

  function bsale_require_checkout_fields($fields)
  {
  //echo("loading...");
  $fields['billing_company']['required'] = true;
  if( isset($fields['billing_ruc']['required']) )
  {
  $fields['billing_ruc']['required'] = true;
  }
  return $fields;
  } */



require_once dirname(__FILE__) . '/lib/Autoload.php';

//use woocommerce_bsalev2\lib\wp\BsaleInit;
//use woocommerce_bsalev2\lib\wp\AjaxFunctions;
//init
$action_init = new BsaleInit();
add_action('init', array( $action_init, 'wooc_bsale_action_init' ));
//init actions
$ajax_f = new AjaxFunctions();
$ajax_f->setup_actions();