Ejemplo n.º 1
0
 /**
  *
  */
 public function testCalcPrice()
 {
     bcscale(6);
     $serviceManager = new ServiceManager();
     $serviceManager->setFactory('db', function () {
         return null;
     });
     HelperConfig::$shop = ['vat' => ['full' => 0, 'reduced' => 0]];
     HelperConfig::$lang = 'de';
     $items = new Items($serviceManager);
     // regular price, no rebate, vat disabled
     $aData = ['itm_price' => '11.11', 'itm_rg' => '01', 'itm_vatid' => 'full'];
     $aPrice = $items->calcPrice($aData);
     $this->assertEquals('11.11', $aPrice['netto_use']);
     $this->assertEquals('11.11', $aPrice['brutto_use']);
     $this->assertEquals('11.11', $aPrice['netto_list']);
     $this->assertArrayNotHasKey('netto_sale', $aPrice);
     $this->assertArrayNotHasKey('netto_rebated', $aPrice);
     // set vat to normal values
     HelperConfig::$shop = ['vat' => ['full' => 19, 'reduced' => 7], 'rebate_groups' => ['01' => ['grosskunde' => 7]]];
     $items = new Items($serviceManager);
     // regular price, no rebate, reduced vat
     $aData = ['itm_price' => '11.11', 'itm_rg' => '01', 'itm_vatid' => 'reduced'];
     $aPrice = $items->calcPrice($aData);
     $this->assertEquals('11.11', $aPrice['netto_use']);
     $this->assertEquals('11.8877', $aPrice['brutto_use']);
     $this->assertEquals('11.11', $aPrice['netto_list']);
     $this->assertArrayNotHasKey('netto_sale', $aPrice);
     $this->assertArrayNotHasKey('netto_rebated', $aPrice);
     // regular price, no rebate, full vat
     $aData = ['itm_price' => '11.11', 'itm_rg' => '01', 'itm_vatid' => 'full'];
     $aPrice = $items->calcPrice($aData);
     $this->assertEquals('11.11', $aPrice['netto_use']);
     $this->assertEquals('13.2209', $aPrice['brutto_use']);
     $this->assertEquals('11.11', $aPrice['netto_list']);
     $this->assertArrayNotHasKey('netto_sale', $aPrice);
     $this->assertArrayNotHasKey('netto_rebated', $aPrice);
     // item sale
     $aData = ['itm_price' => '11.11', 'itm_rg' => '01', 'itm_vatid' => 'full', 'itm_data' => ['sale' => ['start' => date("Ymd") - 1, 'end' => date("Ymd") + 1, 'price' => '9.10']]];
     $aPrice = $items->calcPrice($aData);
     $this->assertEquals('9.1', $aPrice['netto_use']);
     $this->assertEquals('9.1', $aPrice['netto_sale']);
     $this->assertEquals('10.829', $aPrice['brutto_use']);
     $this->assertEquals('11.11', $aPrice['netto_list']);
     $this->assertArrayNotHasKey('netto_rebated', $aPrice);
     // item sale too  late
     $aData = ['itm_price' => '11.11', 'itm_rg' => '01', 'itm_vatid' => 'full', 'itm_data' => ['sale' => ['start' => date("Ymd") - 5, 'end' => date("Ymd") - 1, 'price' => '9.10']]];
     $aPrice = $items->calcPrice($aData);
     $this->assertEquals('11.11', $aPrice['netto_use']);
     $this->assertEquals('13.2209', $aPrice['brutto_use']);
     $this->assertEquals('11.11', $aPrice['netto_list']);
     $this->assertArrayNotHasKey('netto_sale', $aPrice);
     $this->assertArrayNotHasKey('netto_rebated', $aPrice);
     // test item sale too early
     $aData = ['itm_price' => '11.11', 'itm_rg' => '01', 'itm_vatid' => 'full', 'itm_data' => ['sale' => ['start' => date("Ymd") + 1, 'end' => date("Ymd") + 5, 'price' => '9.10']]];
     $aPrice = $items->calcPrice($aData);
     $this->assertEquals('11.11', $aPrice['netto_use']);
     $this->assertEquals('13.2209', $aPrice['brutto_use']);
     $this->assertEquals('11.11', $aPrice['netto_list']);
     $this->assertArrayNotHasKey('netto_sale', $aPrice);
     $this->assertArrayNotHasKey('netto_rebated', $aPrice);
     // init session for rebate testing
     $_SESSION["user"] = ['cust_group' => 'grosskunde'];
     // test rebate group
     $aData = ['itm_price' => '11.11', 'itm_rg' => '01', 'itm_vatid' => 'full'];
     $aPrice = $items->calcPrice($aData);
     $this->assertEquals('10.3323', $aPrice['netto_use']);
     $this->assertEquals('12.295437', $aPrice['brutto_use']);
     $this->assertEquals('11.11', $aPrice['netto_list']);
     $this->assertEquals('10.3323', $aPrice['netto_rebated']);
     $this->assertArrayNotHasKey('netto_sale', $aPrice);
     // test sale/rebate group best price finding
     // rebate best price
     $aData = ['itm_price' => '11.11', 'itm_rg' => '01', 'itm_vatid' => 'full', 'itm_data' => ['sale' => ['start' => date("Ymd") - 1, 'end' => date("Ymd") + 1, 'price' => '10.99']]];
     $aPrice = $items->calcPrice($aData);
     $this->assertEquals('10.3323', $aPrice['netto_use']);
     $this->assertEquals('12.295437', $aPrice['brutto_use']);
     $this->assertEquals('11.11', $aPrice['netto_list']);
     $this->assertEquals('10.3323', $aPrice['netto_rebated']);
     $this->assertEquals('10.99', $aPrice['netto_sale']);
     // sale best price
     $aData = ['itm_price' => '11.11', 'itm_rg' => '01', 'itm_vatid' => 'full', 'itm_data' => ['sale' => ['start' => date("Ymd") - 1, 'end' => date("Ymd") + 1, 'price' => '9.10']]];
     $aPrice = $items->calcPrice($aData);
     $this->assertEquals('9.1', $aPrice['netto_use']);
     $this->assertEquals('10.829', $aPrice['brutto_use']);
     $this->assertEquals('11.11', $aPrice['netto_list']);
     $this->assertEquals('10.3323', $aPrice['netto_rebated']);
     $this->assertEquals('9.1', $aPrice['netto_sale']);
     // non valid price
     $aData = ['itm_price' => 'asdf', 'itm_rg' => '01', 'itm_vatid' => 'full'];
     $aPrice = $items->calcPrice($aData);
     $this->assertFalse($aPrice);
 }