atk4\data\tests\ReferenceSQLTest::testAggregateHasMany PHP Method

testAggregateHasMany() public method

    public function testAggregateHasMany()
    {
        $vat = 0.23;
        $a = ['invoice' => [1 => ['id' => 1, 'ref_no' => 'INV203'], 2 => ['id' => 2, 'ref_no' => 'INV204'], 3 => ['id' => 3, 'ref_no' => 'INV205']], 'invoice_line' => [['total_net' => $n = 10, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1), 'invoice_id' => 1], ['total_net' => $n = 30, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1), 'invoice_id' => 1], ['total_net' => $n = 100, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1), 'invoice_id' => 2], ['total_net' => $n = 25, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1), 'invoice_id' => 3], ['total_net' => $n = 25, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1), 'invoice_id' => 3]]];
        $this->setDB($a);
        $db = new Persistence_SQL($this->db->connection);
        $i = (new Model($db, 'invoice'))->addFields(['ref_no']);
        $l = (new Model($db, 'invoice_line'))->addFields(['invoice_id', 'total_net', 'total_vat', 'total_gross']);
        $i->hasMany('line', $l)->addFields([['total_vat', 'aggregate' => 'sum'], ['total_net', 'aggregate' => 'sum'], ['total_gross', 'aggregate' => 'sum']]);
        $i->load('1');
        $this->assertEquals(40, $i['total_net']);
        $this->assertEquals(9.199999999999999, $i['total_vat']);
        $this->assertEquals(49.2, $i['total_gross']);
        $i->ref('line')->import([['total_net' => $n = 1, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1)], ['total_net' => $n = 2, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1)]]);
        $i->reload();
        $this->assertEquals($n = 43, $i['total_net']);
        $this->assertEquals($n * $vat, $i['total_vat']);
        $this->assertEquals($n * ($vat + 1), $i['total_gross']);
    }