コード例 #1
0
 /**
  * test_add_ticket_purchase
  */
 public function test_add_ticket_purchase()
 {
     // create grand total
     $total_line_item = EEH_Line_Item::create_total_line_item();
     $this->assertEquals(0, $total_line_item->total());
     // create a ticket
     $ticket = $this->new_ticket(array('dollar_surcharge' => 5, 'percent_surcharge' => 10, 'datetimes' => 2));
     // need to save ticket for other tests to work
     $ticket->save();
     // two tickets plz
     $ticket_line_item = EEH_Line_Item::add_ticket_purchase($total_line_item, $ticket, 2);
     // confirm tickets
     $this->assertEquals(2, $ticket_line_item->quantity());
     $this->assertEquals(33, $ticket_line_item->total());
     // confirm subtotal
     $pre_tax_subtotal = EEH_Line_Item::get_pre_tax_subtotal($total_line_item);
     $this->assertEquals(33, $pre_tax_subtotal->total());
     // confirm taxes
     $taxes_subtotal = EEH_Line_Item::get_taxes_subtotal($total_line_item);
     $this->assertEquals(4.95, $taxes_subtotal->total());
     // confirm totals
     $this->assertEquals(37.95, $total_line_item->total());
     // one moar ticket plz
     $ticket_line_item = EEH_Line_Item::add_ticket_purchase($total_line_item, $ticket);
     // confirm tickets
     $this->assertEquals(3, $ticket_line_item->quantity());
     $this->assertEquals(49.5, $ticket_line_item->total());
     // confirm subtotal
     $this->assertEquals(49.5, $pre_tax_subtotal->total());
     // confirm taxes
     $this->assertEquals(7.43, $taxes_subtotal->total());
     // confirm totals
     $this->assertEquals(56.93, $total_line_item->total());
     // total ticket line items count? should just be one ticket line item
     $this->assertEquals(1, count(EEH_Line_Item::get_ticket_line_items($total_line_item)));
     // now add a different ticket
     $new_ticket = $this->new_ticket(array('ticket_price' => 10, 'ticket_taxable' => false, 'datetimes' => 1));
     $new_ticket->save();
     // add one
     $new_ticket_line_item = EEH_Line_Item::add_ticket_purchase($total_line_item, $new_ticket);
     $this->assertEquals(1, $new_ticket_line_item->quantity());
     // add one moar
     $new_ticket_line_item = EEH_Line_Item::add_ticket_purchase($total_line_item, $new_ticket);
     $this->assertEquals(2, $new_ticket_line_item->quantity());
     // confirm totals
     $this->assertEquals(20, $new_ticket_line_item->total());
     $this->assertEquals(69.5, $pre_tax_subtotal->total());
     // should be same taxes as before
     $this->assertEquals(7.43, $taxes_subtotal->total());
     $this->assertEquals(76.93000000000001, $total_line_item->total());
     // total ticket ticket line items?
     $this->assertEquals(2, count(EEH_Line_Item::get_ticket_line_items($total_line_item)));
 }
コード例 #2
0
 /**
  * Gets the tax subtotal line item (assumes there's only one)
  * @return EE_Line_Item
  */
 public function tax_total_line_item()
 {
     return EEH_Line_Item::get_taxes_subtotal($this->total_line_item());
 }
コード例 #3
0
 /**
  *  Gets all tha tax line items
  * @return \EE_Line_Item[]
  */
 public function get_taxes()
 {
     return EEH_Line_Item::get_taxes_subtotal($this->_grand_total)->children();
 }
コード例 #4
0
 /**
  * @group 4710
  */
 public function test_handle_payment_update__paypal_adds_taxes_and_shipping()
 {
     $ppm = $this->new_model_obj_with_dependencies('Payment_Method', array('PMD_type' => 'Paypal_Standard'));
     $ppg = $ppm->type_obj()->get_gateway();
     $ppg->set_settings(array('paypal_id' => $this->_paypal_id, 'paypal_taxes' => TRUE, 'paypal_shipping' => TRUE));
     $t = $this->new_typical_transaction();
     $p = $this->new_model_obj_with_dependencies('Payment', array('TXN_ID' => $t->ID(), 'PMD_ID' => $ppm->ID(), 'PAY_amount' => $t->total()));
     $p->update_extra_meta(EEG_Paypal_Standard::itemized_payment_option_name, true);
     $old_pretax_total = EEH_Line_Item::get_pre_tax_subtotal($t->total_line_item())->total();
     $old_taxable_total = $t->total_line_item()->taxable_total();
     $this->assertNotEmpty($old_taxable_total);
     $old_tax_total = $t->tax_total();
     $this->assertNotEmpty($old_tax_total);
     //skip IPN validation with paypal
     add_filter('FHEE__EEG_Paypal_Standard__validate_ipn__skip', '__return_true');
     //pretend we sent an itemized report to paypal, and thus told them to calculate taxes on it.
     $p->update_extra_meta('itemized_payment', true);
     $tax_in_ipn = 2.8;
     //if the old tax matches what's going to be in the IPN data, we can't verify the IPN data
     //updated the tax can we?
     $this->assertNotEquals($tax_in_ipn, $old_tax_total);
     $ipn_args = array('e_reg_url_link' => '1-203446311152995f326e9ca81b64c95b', 'mc_gross' => $old_pretax_total + 8 + 2.8, 'protection_eligibility' => 'Eligible', 'address_status' => 'confirmed', 'item_number1' => '', 'item_number2' => '', 'payer_id' => 'DQUX5EF8CFFQ2', 'tax' => "{$tax_in_ipn}", 'address_street' => '1 Maire-Victorin', 'payment_date' => '15:21:18 Jul 04, 2014 PDT', 'payment_status' => 'Completed', 'option_selection1_2' => 'http://localhost/wp-develop/src/transactions/?e_reg_url_link=1-203446311152995f326e9ca81b64c95b&ee_payment_method=paypal_standard', 'charset' => 'windows-1252', 'address_zip' => 'M5A 1E1', 'mc_shipping' => '8.00', 'mc_handling' => '0.00', 'first_name' => 'canadaman', 'mc_fee' => '1.50', 'address_country_code' => 'CA', 'address_name' => 'canadaman eh', 'notify_version' => '3.8', 'custom' => '', 'payer_status' => 'verified', 'business' => '*****@*****.**', 'address_country' => 'Canada', 'num_cart_items' => '2', 'mc_handling1' => '0.00', 'mc_handling2' => '0.00', 'address_city' => 'Toronto', 'payer_email' => '*****@*****.**', 'verify_sign' => 'Asuc-38eoonqdqSbDHczw6533JekAJTc2w.QEYe.bLdd3C9Sk1FmgQur', 'mc_shipping1' => '0.00', 'mc_shipping2' => '0.00', 'tax1' => '0.00', 'tax2' => '0.00', 'option_name1_2' => 'NOTIFY URL', 'txn_id' => '4W884024TK795542J', 'payment_type' => 'instant', 'last_name' => 'eh', 'item_name1' => 'Free Ticket', 'address_state' => 'Ontario', 'receiver_email' => '*****@*****.**', 'item_name2' => 'DEBUG INFO (this item only added in sandbox mode', 'payment_fee' => '1.50', 'shipping_discount' => '0.00', 'quantity1' => '1', 'insurance_amount' => '0.00', 'quantity2' => '1', 'receiver_id' => '8STUBD4V9ZUUN', 'txn_type' => 'cart', 'discount' => '0.00', 'mc_gross_1' => '20.00', 'mc_currency' => 'USD', 'mc_gross_2' => '0.00', 'residence_country' => 'CA', 'test_ipn' => '1', 'shipping_method' => 'International Economy', 'transaction_subject' => '', 'payment_gross' => '30.80', 'auth' => 'A7v0XCv0MTRMLTC3ib4B4zYtTI7Wt-pU5StpnoQBIGsiMj5pXBoOr8z8kiKzYdNkeTmwiWW3xlus4rZhBUOqj6g');
     $ppg->handle_payment_update($ipn_args, $t);
     $ppg->update_txn_based_on_payment($p);
     //check the new tax is correct
     $this->assertNotEquals($old_tax_total, $t->tax_total(), 'Its not necessarily wrong for the old tax to match the new tax; but if they match we can\'t be very sure the tax total was updated');
     $this->assertEquals(floatval($ipn_args['tax']), $t->tax_total());
     $tax_line_items = EEH_Line_Item::get_taxes_subtotal($t->total_line_item())->children();
     $this->assertEquals(1, count($tax_line_items));
     $only_tax = array_shift($tax_line_items);
     $this->assertEquals(__('Taxes', 'event_espresso'), $only_tax->name());
     $this->assertEquals(EEM_Payment::status_id_approved, $p->status());
     $this->assertEquals($t->total(), $p->amount());
     //check that the shipping surcharge is correct
     $items_subtotal = EEH_Line_Item::get_pre_tax_subtotal($t->total_line_item());
     $items = $items_subtotal->children();
     $first_item = array_shift($items);
     $this->assertEquals(10, $first_item->total());
     $second_item = array_shift($items);
     $this->assertEquals(8, $second_item->total());
     //EEH_Line_Item::visualize($t->total_line_item());
     $this->assertEquals($old_pretax_total + 8, $items_subtotal->total());
     //check that the transaction's total got updated to match the total line item's
     $this->assertEquals($t->total_line_item()->total(), $t->total());
     //check that if we re-calculate all the prices everything is still the same
     $updated_line_item_total = $t->total_line_item()->total();
     $t->total_line_item()->recalculate_total_including_taxes();
     $this->assertEquals($updated_line_item_total, $t->total_line_item()->total());
 }