error? coupon equal to sales price in Pagseguro


  • Default avatar
    pcdiniz    
     12 years ago
    0

    Hello guys, I like so much this forum because the support of this company is excellent and very fast.

    So now i have a big problem, and as i saw on this post https://awodev.com/forum/awocoupon/help-section/error-coupon-equal-sales-price#comment-3071 I have the same problem, but for Pagseguro plugin.

    If any body can help me, I think that it very simple.

    Bellow is the code of my plugin - pagseguro:

    <?php
    if (!defined('_JEXEC'))
        die(
    'Direct Access to ' basename(__FILE__) . ' is not allowed.');

    /**
     * Payment Plugin PagSeguro - Plugin do PagSeguro
     *
     * @version $Id: pagseguro.php, v1.2 20/04/2012 fsoares $
     * @package VirtueMart 2
     * @subpackage Plugins - payment
     * @author Fernando Soares <www.fernandosoares.com.br>
     * @copyright Copyright (C) 2006-2012 Fernando Soares. All rights reserved.
     *
     * VirtueMart is free software. <http://virtuemart.net>
     *
     */
    if (!class_exists('vmPSPlugin'))
        require(
    JPATH_VM_PLUGINS DS 'vmpsplugin.php');

    class 
    plgVmPaymentPagseguro extends vmPSPlugin {

        
    // instance of class
        
    public static $_this false;

        function 
    __construct(& $subject$config) {

            
    parent::__construct($subject$config);

            
    $this->_loggable true;
            
    $this->tableFields array_keys($this->getTableSQLFields());
            
    $this->_tablepkey 'id'//virtuemart_pagseguro_id';
            
    $this->_tableId 'id'//'virtuemart_pagseguro_id';
            
    $varsToPush = array('pagseguro_merchant_email' => array('''char'),
            
    'pagseguro_token' => array('''char'),
            
    'pagseguro_botao' => array('''char'),
            
    'pagseguro_shipping' => array('''char'),
            
    'payment_logos' => array('''char'),
            
    'debug' => array(0'int'),
            
    'auto_open' => array('''char'),
            
    'new_window' => array('''char'),
            
    'payment_currency' => array('''int'),
            
    'status_pending' => array('''char'),
            
    'status_success' => array('''char'),
            
    'status_completed' => array('''char'),
            
    'status_dispute' => array('''char'),
            
    'status_refunded' => array('''char'),
            
    'status_canceled' => array('''char'),
            
    'countries' => array('''char'),
            
    'min_amount' => array('''int'),
            
    'max_amount' => array('''int'),
            
    'cost_per_transaction' => array('''int'),
            
    'cost_percent_total' => array('''int'),
            
    'tax_id' => array(0'int')
            );

            
    $this->setConfigParameterable($this->_configTableFieldName$varsToPush);
        }

        public function 
    getVmPluginCreateTableSQL() {

            return 
    $this->createTableSQL('Payment Pagseguro Table');
        }

        function 
    getTableSQLFields() {

            
    $SQLfields = array(
            
    'id' => ' INT(11) unsigned NOT NULL AUTO_INCREMENT ',
            
    'virtuemart_order_id' => ' int(1) UNSIGNED DEFAULT NULL',
            
    'order_number' => ' char(32) DEFAULT NULL',
            
    'virtuemart_paymentmethod_id' => ' mediumint(1) UNSIGNED DEFAULT NULL',
            
    'payment_name' => 'varchar(5000)',
            
    'payment_order_total' => 'decimal(15,5) NOT NULL DEFAULT \'0.00000\' ',
            
    'payment_currency' => 'char(3) ',
            
    'cost_per_transaction' => ' decimal(10,2) DEFAULT NULL ',
            
    'cost_percent_total' => ' decimal(10,2) DEFAULT NULL ',
            
    'tax_id' => ' smallint(1) DEFAULT NULL',
            
    'pagseguro_response_invoice' => ' char(32) DEFAULT NULL',
            
    'pagseguro_response_full_name' => ' char(128) DEFAULT NULL',
            
    'pagseguro_response_payer_email' => ' char(128) DEFAULT NULL',
            
    'pagseguro_response_payment_id' => ' char(40) DEFAULT NULL',
            
    'pagseguro_response_gross_amount' => ' decimal(10,2) DEFAULT NULL ',
            
    'pagseguro_response_discount_amount' => ' decimal(10,2) DEFAULT NULL ',
            
    'pagseguro_response_fee_amount' => ' decimal(10,2) DEFAULT NULL ',
            
    'pagseguro_response_net_amount' => ' decimal(10,2) DEFAULT NULL ',
            
    'pagseguro_response_payment_date' => ' char(28) DEFAULT NULL',
            
    'pagseguro_response_payment_method' => ' char(64) DEFAULT NULL',
            
    'pagseguro_response_installment_count' => ' char(4) DEFAULT NULL',
            
    'pagseguro_response_payment_status' => ' char(50) DEFAULT NULL'
            
    );
            return 
    $SQLfields;
        }

        function 
    plgVmConfirmedOrder($cart$order) {

            if (!(
    $method $this->getVmPluginMethod($order['details']['BT']->virtuemart_paymentmethod_id))) {
                return 
    null// Another method was selected, do nothing
            
    }
            if (!
    $this->selectedThisElement($method->payment_element)) {
                return 
    false;
            }
            
    $session JFactory::getSession();
            
    $return_context $session->getId();
            
    $this->_debug $method->debug;
            
    $this->logInfo('plgVmConfirmedOrder order number: ' $order['details']['BT']->order_number'message');

            if (!
    class_exists('PagSeguroLibrary')) {
                require(
    'PagSeguroLibrary/PagSeguroLibrary.php');
            }

            if (!
    class_exists('VirtueMartModelOrders'))
                require( 
    JPATH_VM_ADMINISTRATOR DS 'models' DS 'orders.php' );
            if (!
    class_exists('VirtueMartModelCurrency'))
                require(
    JPATH_VM_ADMINISTRATOR DS 'models' DS 'currency.php');

            
    $new_status '';

            
    $usrBT $order['details']['BT'];
            
    $address = ((isset($order['details']['ST'])) ? $order['details']['ST'] : $order['details']['BT']);


            if (!
    class_exists('TableVendors'))
                require(
    JPATH_VM_ADMINISTRATOR DS 'table' DS 'vendors.php');
            
    $vendorModel VmModel::getModel('Vendor');
            
    $vendorModel->setId(1);
            
    $vendor $vendorModel->getVendor();
            
    $vendorModel->addImages($vendor1);
            
    $this->getPaymentCurrency($method);
            
    $q 'SELECT `currency_code_3` FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id`="' $method->payment_currency '" ';
            
    $db = &JFactory::getDBO();
            
    $db->setQuery($q);
            
    $currency_code_3 $db->loadResult();

            
    $paymentCurrency CurrencyDisplay::getInstance($method->payment_currency);
            
    $totalInPaymentCurrency round($paymentCurrency->convertCurrencyTo($method->payment_currency$order['details']['BT']->order_totalfalse), 2);
            
    $cd CurrencyDisplay::getInstance($cart->pricesCurrency);

            
    $merchant_email $method->pagseguro_merchant_email;
            if (empty(
    $merchant_email)) {
                
    vmInfo(JText::_('VMPAYMENT_PAGSEGURO_MERCHANT_EMAIL_NOT_SET'));
                return 
    false;
            }
            
            
    $pagseguro_token $method->pagseguro_token;
            if (empty(
    $pagseguro_token)) {
                
    vmInfo(JText::_('VMPAYMENT_PAGSEGURO_TOKEN_NOT_SET'));
                return 
    false;
            }
            
            
    $pagseguro_botao $method->pagseguro_botao;

            
    // Instantiate a new payment request
            
    $paymentRequest = new PagSeguroPaymentRequest();
            
            
    // Sets the currency
            
    $paymentRequest->setCurrency('BRL');
    /*        
            // Add an item for this payment request
            $paymentRequest->addItem('P'.$order['details']['BT']->order_number, 
                                    JText::_('VMPAYMENT_PAGSEGURO_ORDER_NUMBER') . ': ' . $order['details']['BT']->order_number, 
                                    1, 
                                    round($order['details']['BT']->order_total, 2)
                                    );
    */
            // Add an items for this payment request
            
    $Rref 0;
            foreach (
    $cart->products as $key => $product) {
                
    $Rref++;
                if(
    $product->product_weight_uom == "KG" || $product->product_weight_uom == "Kg"){
                    
    $weight_g round($product->product_weight 1000);
                }else{
                    
    $weight_g round($product->product_weight);
                }
                if(
    $product->product_sku == ""){
                    
    $ref_produto "Ref" $Rref;
                }else{
                    
    $ref_produto $product->product_sku;
                }
                
    $paymentRequest->addItem($ref_produto
                                        
    substr(strip_tags($product->product_name), 0100), 
                                        
    $product->quantity
                                        
    round($cart->pricesUnformatted[$key]['salesPrice'], 2),
                                        
    $weight_g,
                                        
    round($cart->pricesUnformatted ['salesPriceShipment'], 2)
                                        );
            }
            
            { 
    # seyi_code
                /*if (!empty($cart->couponCode)) {
                    $paymentRequest->setExtraAmount((round($cart->pricesUnformatted['salesPriceCoupon'], 2)*-1)+round($cart->pricesUnformatted ['salesPricePayment'], 2));
                }*/
                
    if(!empty($order['details']['BT']->coupon_code)) {
                    
    $paymentRequest->setExtraAmount((round($order['details']['BT']->coupon_discount2)*-1));
                }
            }

            
    // Sets a reference code for this payment request, it is useful to identify this payment in future notifications.
            
    $paymentRequest->setReference($order['details']['BT']->order_number '|||' $return_context);
            
            
    // Sets shipping information for this payment request
            
    $paymentRequest->setShippingType($method->pagseguro_shipping);

            
    $cep preg_replace('#[^0-9]#'''$address->zip);
            
    $paymentRequest->setShippingAddress($cep$address->address_1,  
                
    '000'
                
    ' '
                isset(
    $address->address_2) ? $address->address_2 ''
                
    $address->city
                isset(
    $address->virtuemart_state_id) ? ShopFunctions::getStateByID($address->virtuemart_state_id'state_2_code') : ''
                
    ShopFunctions::getCountryByID($address->virtuemart_country_id'country_3_code')    //    'BRA'
            
    );
            
            
    // Sets your customer information.
            
    $telefone ereg_replace('[^0-9]'''$address->phone_1);
            
    $paymentRequest->setSender($address->first_name ' ' $address->last_name
                
    $order['details']['BT']->email
                
    substr($telefone0, (strlen($telefone)-8)), substr($telefone, -8)
            );

            
    // Seta o Retorno ao site
            
    $paymentRequest->setRedirectUrl(JROUTE::_(JURI::root() . 'index.php?option=com_virtuemart'));
            
            try {
                
    // #### Crendencials #####
                
    $credentials = new PagSeguroAccountCredentials($merchant_email$pagseguro_token);
                
                
    // Register this payment request in PagSeguro, to obtain the payment URL for redirect your customer.
                
    $url $paymentRequest->register($credentials);

            } catch (
    PagSeguroServiceException $e) {
                
    vmInfo(JText::_('VMPAYMENT_PAGSEGURO_ERROR_MSG') . $e->getMessage());
            }

    /* para testes o futuro
            "return" => JROUTE::_(JURI::root() . 'index.php?option=com_virtuemart&view=pluginresponse&task=pluginresponsereceived&on=' . $order['details']['BT']->order_number . '&pm=' . $order['details']['BT']->virtuemart_paymentmethod_id),
            "notify_url" => JROUTE::_(JURI::root() . 'index.php?option=com_virtuemart&view=pluginresponse&task=pluginnotification&tmpl=component'),
    */

            // Prepare data that should be stored in the database
            
    $dbValues['order_number'] = $order['details']['BT']->order_number;
            
    $dbValues['payment_name'] = $this->renderPluginName($method$order);
            
    $dbValues['virtuemart_paymentmethod_id'] = $cart->virtuemart_paymentmethod_id;
            
    $dbValues['cost_per_transaction'] = $method->cost_per_transaction;
            
    $dbValues['cost_percent_total'] = $method->cost_percent_total;
            
    $dbValues['payment_currency'] = $method->payment_currency;
            
    $dbValues['payment_order_total'] = $totalInPaymentCurrency;
            
    $dbValues['tax_id'] = $method->tax_id;
            
    $this->storePSPluginInternalData($dbValues);

            
    // new window opening
            
    if($method->new_window){
                
    $nova1 ' target="_blank" ';
                
    $nova2 '';
            }else{
                
    $nova1 '';
                
    $nova2 ', "_self"';
            }

            
    // add spin image
            
    $html '<html><head><title>Redirecionando</title></head><body><div style="margin: auto; text-align: center;">';
            
    $html .= '<p>' JText::_('VMPAYMENT_PAGSEGURO_PLEASE_WAIT') . '</p>';
            
    $html .= '<p>' JText::_('VMPAYMENT_PAGSEGURO_CLICK_ON_BUTTON') . '</p>';
            
    $html .= '<p><a title="URL do pagamento" href="' $url '"' $nova1 '>';
            
    $html .= '<img src="'.$pagseguro_botao.'" alt="' JText::_('VMPAYMENT_PAGSEGURO_BTN_ALT') . '">';
            
    $html .= '</a></p>';
            
    // auto opening
            
    if($method->auto_open){
                
    $html .= '<script type="text/javascript">';
                
    $html .= 'window.open("' $url '"' $nova2 ');';
                
    $html .= '</script>';
            }
            
    $html .= '</body></html>';

            
    //     2 = don't delete the cart, don't send email and don't redirect
            
    return $this->processConfirmedOrderPaymentResponse(2$cart$order$html$dbValues['payment_name'], $new_status);
        }

        function 
    plgVmgetPaymentCurrency($virtuemart_paymentmethod_id, &$paymentCurrencyId) {

            if (!(
    $method $this->getVmPluginMethod($virtuemart_paymentmethod_id))) {
                return 
    null// Another method was selected, do nothing
            
    }
            if (!
    $this->selectedThisElement($method->payment_element)) {
                return 
    false;
            }
            
    $this->getPaymentCurrency($method);
            
    $paymentCurrencyId $method->payment_currency;
        }

          
    /**
         * This event is fired when the  method notifies you when an event occurs that affects the order.
         * Typically,  the events  represents for payment authorizations, Fraud Management Filter actions and other actions,
         * such as refunds, disputes, and chargebacks.
         *
         * NOTE for Plugin developers:
         *  If the plugin is NOT actually executed (not the selected payment method), this method must return NULL
         *
         * @param $return_context: it was given and sent in the payment form. The notification should return it back.
         * Used to know which cart should be emptied, in case it is still in the session.
         * @param int $virtuemart_order_id : payment  order id
         * @param char $new_status : new_status for this order id.
         * @return mixed Null when this method was not selected, otherwise the true or false
         *
         * @author Valerie Isaksen
         *
         *
          public function plgVmOnPaymentNotification() {
          return null;
          }
        */

        
    function plgVmOnPaymentNotification() {

            if (!
    class_exists('VirtueMartModelOrders'))
                require( 
    JPATH_VM_ADMINISTRATOR DS 'models' DS 'orders.php' );
            
    $pagseguro_data JRequest::get('post');

            if (!isset(
    $pagseguro_data['notificationType']) && !isset($pagseguro_data['notificationCode'])) {
                return;
            }

            if (!
    class_exists('PagSeguroLibrary')) {
                require(
    'PagSeguroLibrary/PagSeguroLibrary.php');
            }

            
    $qps 'SELECT `virtuemart_paymentmethod_id` FROM `#__virtuemart_paymentmethods` WHERE `payment_element`="pagseguro" ';
            
    $dbps = &JFactory::getDBO();
            
    $dbps->setQuery($qps);
            
    $psmethod_id $dbps->loadResult();
            
            
    $psmethod $this->getVmPluginMethod($psmethod_id);
            if (!
    $this->selectedThisElement($psmethod->payment_element)) {
                return 
    false;
            }

            
    // Definindo as credenciais
            
    $merchant_email $psmethod->pagseguro_merchant_email;
            
    $pagseguro_token $psmethod->pagseguro_token;
            
            
    //Destroys the variables not used
            
    unset($qps);
            unset(
    $dbps);
            unset(
    $psmethod);
            unset(
    $psmethod_id);

            
    $credentials = new PagSeguroAccountCredentials($merchant_email$pagseguro_token);  

            
    // Tipo de notificação recebida
            
    $type $pagseguro_data['notificationType'];
            
    // Código da notificação recebida
            
    $code $pagseguro_data['notificationCode'];
            
    // Verificando tipo de notificação recebida
            
    if ($type === 'transaction') {
                
    // Obtendo o objeto PagSeguroTransaction a partir do código de notificação
                
    $transaction PagSeguroNotificationService::checkTransaction($credentials$code); // código de notificação
            
    }else{
                
    $this->logInfo('Tipo não é transação ''ERROR');
                return 
    false;
            }

            
    //Dados da referência
            
    $referencia $transaction->getReference();
            
    $PSdataRef explode('|||'$referencia);
            
    $order_number $PSdataRef[0];
            
    $return_context $PSdataRef[1];
            
    $virtuemart_order_id VirtueMartModelOrders::getOrderIdByOrderNumber($order_number);
            
    //$this->logInfo('plgVmOnPaymentNotification: virtuemart_order_id  found ' . $virtuemart_order_id, 'message');

            
    if (!$virtuemart_order_id) {
                return;
            }
            
    $vendorId 0;
            
    $payment $this->getDataByOrderId($virtuemart_order_id);

            
    $method $this->getVmPluginMethod($payment->virtuemart_paymentmethod_id);
            if (!
    $this->selectedThisElement($method->payment_element)) {
                return 
    false;
            }

            
    $this->_debug $method->debug;
            if (!
    $payment) {
                
    $this->logInfo('getDataByOrderId payment not found: exit ''ERROR');
                return 
    null;
            }

            
    $this->logInfo('pagseguro_data ' implode('   '$pagseguro_data), 'message');

            
    $this->_storePagseguroInternalData($method$transaction$virtuemart_order_id);

            
    $ps_status $transaction->getStatus();
            
    $payment_status $ps_status->getValue();
            
    $payment_status_str JText::_('VMPAYMENT_PAGSEGURO_STATUS_'.$ps_status->getTypeFromValue());
    /*
            if (empty($payment_status) || ($payment_status > 7)) {
                //return false;
            }
    */
            
    $order = array();
            
    $new_status '';
            if (
    $payment_status == || $payment_status == 2) {
                
    $new_status $method->status_pending;
                
    $order['order_status'] = $new_status;
                
    $order['customer_notified'] =1;
                
    $order['comments'] = JText::sprintf('VMPAYMENT_PAGSEGURO_PAYMENT_STATUS_PENDING'$order_number$payment_status_str);
            } elseif (
    $payment_status == 3) {
                
    $new_status $method->status_success;
                
    $order['order_status'] = $new_status;
                
    $order['customer_notified'] =1;
                
    $order['comments'] = JText::sprintf('VMPAYMENT_PAGSEGURO_PAYMENT_STATUS_CONFIRMED'$order_number$payment_status_str);
            } elseif (
    $payment_status == 4) {
                
    $new_status $method->status_completed;
                
    $order['order_status'] = $new_status;
                
    $order['customer_notified'] =0;
                
    $order['comments'] = JText::sprintf('VMPAYMENT_PAGSEGURO_PAYMENT_STATUS_COMPLETED'$order_number$payment_status_str);
            } elseif (
    $payment_status == 5) {
                
    $new_status $method->status_dispute;
                
    $order['order_status'] = $new_status;
                
    $order['customer_notified'] =0;
                
    $order['comments'] = JText::sprintf('VMPAYMENT_PAGSEGURO_PAYMENT_STATUS_DISPUTE'$order_number$payment_status_str);
            } elseif (
    $payment_status == 6) {
                
    $new_status $method->status_refunded;
                
    $order['order_status'] = $new_status;
                
    $order['customer_notified'] =0;
                
    $order['comments'] = JText::sprintf('VMPAYMENT_PAGSEGURO_PAYMENT_STATUS_REFUNDED'$order_number$payment_status_str);
            } elseif (
    $payment_status == 7) {
                
    $new_status $method->status_canceled;
                
    $order['order_status'] = $new_status;
                
    $order['customer_notified'] =1;
                
    $order['comments'] = JText::sprintf('VMPAYMENT_PAGSEGURO_PAYMENT_STATUS_CANCELED'$order_number$payment_status_str);
            }

            
    $this->logInfo('plgVmOnPaymentNotification return new_status:' $new_status'message');

            
    $modelOrder VmModel::getModel('orders');
            
    $modelOrder->updateStatusForOneOrder($virtuemart_order_id$ordertrue);

            
    $this->logInfo('Notification, sentOrderConfirmedEmail ' $order_number ' ' $new_status'message');
            
            
    // objeto PagSeguroPaymentMethod
            
    $paymentMethod $transaction->getPaymentMethod();
            
    // objeto PagSeguroPaymentMethodCode
            
    $code $paymentMethod->getCode();
            
    // objeto PagSeguroSender
            
    $sender $transaction->getSender();

            
    $mailsubject JText::_('VMPAYMENT_PAGSEGURO_NPI_EMAIL_SUBJECT') . $order_number;
            
    $mailbody JText::_('VMPAYMENT_PAGSEGURO_NPI_EMAIL_TEXT') . "\n";
            
    $mailbody .= "-----------------------------------------------------\n";
            
    $mailbody .= JText::_('VMPAYMENT_PAGSEGURO_NPI_PAYMENT_ID') . " : " $transaction->getCode() . "\n";
            
    $mailbody .= JText::_('VMPAYMENT_PAGSEGURO_NPI_PAYMENT_METHOD') . " : " $code->getValue() . " - " JText::_('VMPAYMENT_PAGSEGURO_METHOD_'.$code->getTypeFromValue()) . "\n";
            
    $mailbody .= JText::_('VMPAYMENT_PAGSEGURO_NPI_CUSTOMER_EMAIL') . " : " $sender->getEmail() . "\n";
            
    $mailbody .= JText::_('VMPAYMENT_PAGSEGURO_NPI_CUSTOMER_NAME') . " : " $sender->getName() . "\n";
            
    $mailbody .= JText::_('VMPAYMENT_PAGSEGURO_NPI_ORDER_NUMBER') . " : " $order_number "\n";
            
    $mailbody .= JText::_('VMPAYMENT_PAGSEGURO_NPI_ORDER_AMOUNT') . " : " $transaction->getGrossAmount() . "\n";
            
    $mailbody .= JText::_('VMPAYMENT_PAGSEGURO_NPI_PS_STATUS') . " : " $payment_status " - " $payment_status_str "\n";
            
    $mailbody .= JText::_('VMPAYMENT_PAGSEGURO_NPI_ORDER_STATUS') . " : " $new_status "\n\n";
            
    $this->sendEmailToVendorAndAdmins($mailsubject$mailbody);

            
    //// remove vmcart
            
    $this->emptyCart($return_context);
            
    //die();
        
    }

        function 
    _storePagseguroInternalData($method$transaction$virtuemart_order_id) {

            
    // objeto PagSeguroStatus
            
    $ps_status $transaction->getStatus();
            
    // objeto PagSeguroSender
            
    $sender $transaction->getSender();
            
    // objeto PagSeguroPaymentMethod
            
    $PSpaymentMethod $transaction->getPaymentMethod();
            
    // objeto PagSeguroPaymentMethodCode
            
    $PSpayCode $PSpaymentMethod->getCode();

            
    $PSdataRef explode('|||'$transaction->getReference());

            
    $response_fields['pagseguro_response_invoice'] = $PSdataRef[0];
            
    $response_fields['pagseguro_response_payment_date'] = $transaction->getLastEventDate();
            
    $response_fields['pagseguro_response_payment_status'] = $ps_status->getValue().' - '.JText::_('VMPAYMENT_PAGSEGURO_STATUS_'.$ps_status->getTypeFromValue());
            
    $response_fields['pagseguro_response_payer_email'] = $sender->getEmail();
            
    $response_fields['pagseguro_response_full_name'] = $sender->getName();
            
    $response_fields['pagseguro_response_payment_id'] = $transaction->getCode();
            
    $response_fields['pagseguro_response_gross_amount'] = $transaction->getGrossAmount();
            
    $response_fields['pagseguro_response_discount_amount'] = $transaction->getDiscountAmount();
            
    $response_fields['pagseguro_response_fee_amount'] = $transaction->getFeeAmount();
            
    $response_fields['pagseguro_response_net_amount'] = $transaction->getNetAmount();
            
    $response_fields['pagseguro_response_payment_method'] = $PSpayCode->getValue().' - '.JText::_('VMPAYMENT_PAGSEGURO_METHOD_'.$PSpayCode->getTypeFromValue());
            
    $response_fields['pagseguro_response_installment_count'] = $transaction->getInstallmentCount();
            
    $response_fields['payment_name'] = $this->renderPluginName($method);
            
    $response_fields['order_number'] = $transaction->getReference();
            
    $response_fields['virtuemart_order_id'] = $virtuemart_order_id;
            
    //$preload=true   preload the data here too preserve not updated data
            
    $this->storePSPluginInternalData($response_fields'virtuemart_order_id'true);
        }

        function 
    _getTablepkeyValue($virtuemart_order_id) {
            
    $db JFactory::getDBO();
            
    $q 'SELECT ' $this->_tablepkey ' FROM `' $this->_tablename '` '
            
    'WHERE `virtuemart_order_id` = ' $virtuemart_order_id;
            
    $db->setQuery($q);

            if (!(
    $pkey $db->loadResult())) {
                
    JError::raiseWarning(500$db->getErrorMsg());
                return 
    '';
            }
            return 
    $pkey;
        }

        
    /**
         * Display stored payment data for an order
         * @see components/com_virtuemart/helpers/vmPSPlugin::plgVmOnShowOrderBEPayment()
         */
        
    function plgVmOnShowOrderBEPayment($virtuemart_order_id$payment_method_id) {

            if (!
    $this->selectedThisByMethodId($payment_method_id)) {
                return 
    null// Another method was selected, do nothing
            
    }


            if (!(
    $paymentTable $this->_getPagseguroInternalData($virtuemart_order_id) )) {
                
    // JError::raiseWarning(500, $db->getErrorMsg());
                
    return '';
            }
            
    $this->getPaymentCurrency($paymentTable);
            
    $q 'SELECT `currency_code_3` FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id`="' $paymentTable->payment_currency '" ';
            
    $db = &JFactory::getDBO();
            
    $db->setQuery($q);
            
    $currency_code_3 $db->loadResult();
            
    $html '<table class="adminlist">' "\n";
            
    $html .=$this->getHtmlHeaderBE();
            
    $html .= $this->getHtmlRowBE('PAGSEGURO_PAYMENT_NAME'$paymentTable->payment_name);
            
    $code "pagseguro_response_";
            foreach (
    $paymentTable as $key => $value) {
                if (
    substr($key0strlen($code)) == $code) {
                    
    $html .= $this->getHtmlRowBE($key$value);
                }
            }
            
    $html .= '</table>' "\n";
            return 
    $html;
        }

        function 
    _getPagseguroInternalData($virtuemart_order_id$order_number='') {
            
    $db JFactory::getDBO();
            
    $q 'SELECT * FROM `' $this->_tablename '` WHERE ';
            if (
    $order_number) {
                
    $q .= " `order_number` = '" $order_number "'";
            } else {
                
    $q .= ' `virtuemart_order_id` = ' $virtuemart_order_id;
            }

            
    $db->setQuery($q);
            if (!(
    $paymentTable $db->loadObject())) {
                
    // JError::raiseWarning(500, $db->getErrorMsg());
                
    return '';
            }
            return 
    $paymentTable;
        }

        function 
    getCosts(VirtueMartCart $cart$method$cart_prices) {
            if (
    preg_match('/%$/'$method->cost_percent_total)) {
                
    $cost_percent_total substr($method->cost_percent_total0, -1);
            } else {
                
    $cost_percent_total $method->cost_percent_total;
            }
            return (
    $method->cost_per_transaction + ($cart_prices['salesPrice'] * $cost_percent_total 0.01));
        }

        
    /**
         * Check if the payment conditions are fulfilled for this payment method
         * @author: Valerie Isaksen
         *
         * @param $cart_prices: cart prices
         * @param $payment
         * @return true: if the conditions are fulfilled, false otherwise
         *
         */
        
    protected function checkConditions($cart$method$cart_prices) {


            
    $address = (($cart->ST == 0) ? $cart->BT $cart->ST);

            
    $amount $cart_prices['salesPrice'];
            
    $amount_cond = ($amount >= $method->min_amount AND $amount <= $method->max_amount
            
    OR
            (
    $method->min_amount <= $amount AND ($method->max_amount == 0) ));

            
    $countries = array();
            if (!empty(
    $method->countries)) {
                if (!
    is_array($method->countries)) {
                    
    $countries[0] = $method->countries;
                } else {
                    
    $countries $method->countries;
                }
            }
            
    // probably did not gave his BT:ST address
            
    if (!is_array($address)) {
                
    $address = array();
                
    $address['virtuemart_country_id'] = 0;
            }

            if (!isset(
    $address['virtuemart_country_id']))
            
    $address['virtuemart_country_id'] = 0;
            if (
    in_array($address['virtuemart_country_id'], $countries) || count($countries) == 0) {
                if (
    $amount_cond) {
                    return 
    true;
                }
            }

            return 
    false;
        }

        
    /**
         * We must reimplement this triggers for joomla 1.7
         */

        /**
         * Create the table for this plugin if it does not yet exist.
         * This functions checks if the called plugin is active one.
         * When yes it is calling the standard method to create the tables
         * @author Valérie Isaksen
         *
         */
        
    function plgVmOnStoreInstallPaymentPluginTable($jplugin_id) {

            return 
    $this->onStoreInstallPluginTable($jplugin_id);
        }

        
    /**
         * This event is fired after the payment method has been selected. It can be used to store
         * additional payment info in the cart.
         *
         * @author Max Milbers
         * @author Valérie isaksen
         *
         * @param VirtueMartCart $cart: the actual cart
         * @return null if the payment was not selected, true if the data is valid, error message if the data is not vlaid
         *
         */
        
    public function plgVmOnSelectCheckPayment(VirtueMartCart $cart) {
            return 
    $this->OnSelectCheck($cart);
        }

        
    /**
         * plgVmDisplayListFEPayment
         * This event is fired to display the pluginmethods in the cart (edit shipment/payment) for exampel
         *
         * @param object $cart Cart object
         * @param integer $selected ID of the method selected
         * @return boolean True on succes, false on failures, null when this plugin was not selected.
         * On errors, JError::raiseWarning (or JError::raiseError) must be used to set a message.
         *
         * @author Valerie Isaksen
         * @author Max Milbers
         */
        
    public function plgVmDisplayListFEPayment(VirtueMartCart $cart$selected 0, &$htmlIn) {
            return 
    $this->displayListFE($cart$selected$htmlIn);
        }

        
    /*
         * plgVmonSelectedCalculatePricePayment
        * Calculate the price (value, tax_id) of the selected method
        * It is called by the calculator
        * This function does NOT to be reimplemented. If not reimplemented, then the default values from this function are taken.
        * @author Valerie Isaksen
        * @cart: VirtueMartCart the current cart
        * @cart_prices: array the new cart prices
        * @return null if the method was not selected, false if the shiiping rate is not valid any more, true otherwise
        *
        *
        */

        
    public function plgVmonSelectedCalculatePricePayment(VirtueMartCart $cart, array &$cart_prices, &$cart_prices_name) {
            return 
    $this->onSelectedCalculatePrice($cart$cart_prices$cart_prices_name);
        }

        
    /**
         * plgVmOnCheckAutomaticSelectedPayment
         * Checks how many plugins are available. If only one, the user will not have the choice. Enter edit_xxx page
         * The plugin must check first if it is the correct type
         * @author Valerie Isaksen
         * @param VirtueMartCart cart: the cart object
         * @return null if no plugin was found, 0 if more then one plugin was found,  virtuemart_xxx_id if only one plugin is found
         *
         */
        
    function plgVmOnCheckAutomaticSelectedPayment(VirtueMartCart $cart, array $cart_prices = array()) {
            return 
    $this->onCheckAutomaticSelected($cart$cart_prices);
        }

        
    /**
         * This method is fired when showing the order details in the frontend.
         * It displays the method-specific data.
         *
         * @param integer $order_id The order ID
         * @return mixed Null for methods that aren't active, text (HTML) otherwise
         * @author Max Milbers
         * @author Valerie Isaksen
         */
        
    public function plgVmOnShowOrderFEPayment($virtuemart_order_id$virtuemart_paymentmethod_id, &$payment_name) {
            
    $this->onShowOrderFE($virtuemart_order_id$virtuemart_paymentmethod_id$payment_name);
        }

        
    /**
         * This event is fired during the checkout process. It can be used to validate the
         * method data as entered by the user.
         *
         * @return boolean True when the data was valid, false otherwise. If the plugin is not activated, it should return null.
         * @author Max Milbers

         public function plgVmOnCheckoutCheckDataPayment($psType, VirtueMartCart $cart) {
         return null;
         }
         */

        /**
         * This method is fired when showing when priting an Order
         * It displays the the payment method-specific data.
         *
         * @param integer $_virtuemart_order_id The order ID
         * @param integer $method_id  method used for this order
         * @return mixed Null when for payment methods that were not selected, text (HTML) otherwise
         * @author Valerie Isaksen
         */
        
    function plgVmonShowOrderPrintPayment($order_number$method_id) {
            return 
    $this->onShowOrderPrint($order_number$method_id);
        }

        
    /**
         * Save updated order data to the method specific table
         *
         * @param array $_formData Form data
         * @return mixed, True on success, false on failures (the rest of the save-process will be
         * skipped!), or null when this method is not actived.
         * @author Oscar van Eijk

         public function plgVmOnUpdateOrderPayment(  $_formData) {
         return null;
         }
         */
        /**
         * Save updated orderline data to the method specific table
         *
         * @param array $_formData Form data
         * @return mixed, True on success, false on failures (the rest of the save-process will be
         * skipped!), or null when this method is not actived.
         * @author Oscar van Eijk

         public function plgVmOnUpdateOrderLine(  $_formData) {
         return null;
         }
         */
        /**
         * plgVmOnEditOrderLineBE
         * This method is fired when editing the order line details in the backend.
         * It can be used to add line specific package codes
         *
         * @param integer $_orderId The order ID
         * @param integer $_lineId
         * @return mixed Null for method that aren't active, text (HTML) otherwise
         * @author Oscar van Eijk

         public function plgVmOnEditOrderLineBE(  $_orderId, $_lineId) {
         return null;
         }
         */

        /**
         * This method is fired when showing the order details in the frontend, for every orderline.
         * It can be used to display line specific package codes, e.g. with a link to external tracking and
         * tracing systems
         *
         * @param integer $_orderId The order ID
         * @param integer $_lineId
         * @return mixed Null for method that aren't active, text (HTML) otherwise
         * @author Oscar van Eijk

         public function plgVmOnShowOrderLineFE(  $_orderId, $_lineId) {
         return null;
         }
         */
        
    function plgVmDeclarePluginParamsPayment($name$id, &$data) {
            return 
    $this->declarePluginParams('payment'$name$id$data);
        }

        function 
    plgVmSetOnTablePluginParamsPayment($name$id, &$table) {
            return 
    $this->setOnTablePluginParams($name$id$table);
        }


    }

    // No closing tag
    ?>


    Thank you in advanced

    Paulo

  • Your avatar
    seyi    
     12 years ago
    0

    Hello,

    There are a few problems mentioned in that forum topic. Exactly what is the problem?