getJsonDataSetFromFile(); } public function testAddEanToProduct() { $productEan = sqlQueryBuilder()->select('ean')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $this->assertNull($productEan); $worker = $this->get(StockInWorker::class); $worker->addEan(371506, 4524667014270); $newProductEan = sqlQueryBuilder()->select('ean')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $this->assertEquals(4524667014270, $newProductEan); } public function testAddEanToVariation() { $productEan = sqlQueryBuilder()->select('ean')->from('products_variations')->where(Operator::equals(['id' => 1718603]))->execute()->fetchColumn(); $this->assertEquals(1234567891234, $productEan); $worker = $this->get(StockInWorker::class); $worker->addEan(371505, 1111111111111); $newProductEan = sqlQueryBuilder()->select('ean')->from('products_variations')->where(Operator::equals(['id' => 1718603]))->execute()->fetchColumn(); $this->assertEquals(1111111111111, $newProductEan); } public function testSubmitStockIn() { $productStockIn = sqlQueryBuilder()->select('in_store')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $variationStockIn = sqlQueryBuilder()->select('in_store')->from('products_variations')->where(Operator::equals(['id' => 1718603]))->execute()->fetchColumn(); $this->assertEquals(0, $productStockIn); $this->assertEquals(0, $variationStockIn); $worker = $this->get(StockInWorker::class); $result = $worker->SubmitStockIn(21886, $this->getStockInRows()); $this->assertTrue($result); $productStockIn = sqlQueryBuilder()->select('in_store')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $variationStockIn = sqlQueryBuilder()->select('in_store')->from('products_variations')->where(Operator::equals(['id' => 1718603]))->execute()->fetchColumn(); $this->assertEquals(2, $productStockIn); $this->assertEquals(3, $variationStockIn); } public function testSubmitMassStockIn() { $productStockIn = sqlQueryBuilder()->select('in_store')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $variationStockIn = sqlQueryBuilder()->select('in_store')->from('products_variations')->where(Operator::equals(['id' => 1718603]))->execute()->fetchColumn(); $this->assertEquals(0, $productStockIn); $this->assertEquals(0, $variationStockIn); $data = [ 371506 => new \stdClass(), 371505 => new \stdClass(), 371507 => new \stdClass(), ]; $data[371506]->checked = 8; // z celkem 6 + 6 je v naskladnenich $data[371506]->id = 371506; $data[371506]->id_product = 3822; $data[371506]->id_variation = null; $data[371505]->checked = 12; // celkem 5 + 5 v naskladnenich $data[371505]->id = 371505; $data[371505]->id_product = 101900; $data[371505]->id_variation = 1718603; $data[371507]->checked = 0; // celkem 5 + 5 v naskladnenich $data[371507]->id = 371507; $data[371507]->id_product = 101900; $data[371507]->id_variation = 1718604; $worker = $this->get(StockInWorker::class); $result = $worker->SubmitStockIn('21886_21887', $data); $new_stock_in_id = sqlQueryBuilder() ->select('id') ->from('stock_in') ->setMaxResults(1) ->orderBy('id', 'DESC') ->execute() ->fetchColumn(); $this->assertTrue($result); $this->assertEquals(8, sqlQueryBuilder()->select('in_store')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn()); $this->assertEquals(12, sqlQueryBuilder()->select('in_store')->from('products_variations')->where(Operator::equals(['id' => 1718603]))->execute()->fetchColumn()); // z 12 to vzalo 6 sem $this->assertEquals(6, sqlQueryBuilder() ->select('quantity') ->from('stock_in_items') ->where(Operator::equals(['id_product' => 3822, 'id_stock_in' => 21886])) ->execute()->fetchColumn()); // tak sem musely zbyt dva $this->assertEquals(2, sqlQueryBuilder() ->select('quantity') ->from('stock_in_items') ->where(Operator::equals(['id_product' => 3822, 'id_stock_in' => 21887])) ->execute()->fetchColumn()); // a do treti faktury jich musely jit 4 $this->assertEquals(4, sqlQueryBuilder() ->select('quantity') ->from('stock_in_items') ->where(Operator::equals(['id_product' => 3822, 'id_stock_in' => $new_stock_in_id])) ->execute()->fetchColumn()); // tady nebylo nic, takze smazat $this->assertFalse(sqlQueryBuilder() ->select('quantity') ->from('stock_in_items') ->where(Operator::equalsNullable(['id_product' => 101900, 'id_variation' => 1718604, 'id_stock_in' => 21886])) ->execute()->fetchColumn()); // tady nebylo nic, takze smazat $this->assertFalse(sqlQueryBuilder() ->select('quantity') ->from('stock_in_items') ->where(Operator::equalsNullable(['id_product' => 101900, 'id_variation' => 1718604, 'id_stock_in' => 21887])) ->execute()->fetchColumn()); // zbylo 10 tak se da do novy faktury $this->assertEquals(10, sqlQueryBuilder() ->select('quantity') ->from('stock_in_items') ->where(Operator::equalsNullable(['id_product' => 101900, 'id_variation' => 1718604, 'id_stock_in' => $new_stock_in_id])) ->execute()->fetchColumn()); // tady melo bejt 5, jelikoz je dvanact tak musi byt pet $this->assertEquals(5, sqlQueryBuilder() ->select('quantity') ->from('stock_in_items') ->where(Operator::equals(['id_product' => 101900, 'id_variation' => 1718603, 'id_stock_in' => 21886])) ->execute()->fetchColumn()); // tady melo bejt taky pet + 2 byly navic, takze se pridaj do posledni faktury $this->assertEquals(7, sqlQueryBuilder() ->select('quantity') ->from('stock_in_items') ->where(Operator::equals(['id_product' => 101900, 'id_variation' => 1718603, 'id_stock_in' => 21887])) ->execute()->fetchColumn()); $this->assertFalse(sqlQueryBuilder() ->select('quantity') ->from('stock_in_items') ->where(Operator::equals(['id_product' => 101900, 'id_variation' => 1718603, 'id_stock_in' => $new_stock_in_id])) ->execute()->fetchColumn()); } public function testStockInCreateWarehouseProducts() { $this->insertSQL('warehouse_products', ['id_product' => 3822, 'pieces' => 3, 'id_position' => 7]); $worker = $this->get(StockInWorker::class); $result = $worker->SubmitStockIn(21886, $this->getStockInRows()); $this->assertTrue($result); $this->assertEquals('invoice', sqlQueryBuilder()->select('id_index')->from('stock_in')->where(Operator::equals(['id' => 21886]))->execute()->fetchColumn()); $this->assertEquals(5, sqlQueryBuilder()->select('SUM(pieces)')->from('warehouse_products')->where(Operator::equals(['id_product' => 3822]))->groupBy('id_product')->execute()->fetchColumn()); $this->assertEquals(5, sqlQueryBuilder()->select('pieces')->from('warehouse_products')->where(Operator::equals(['id_variation' => 1718603]))->execute()->fetchColumn()); $this->assertEquals(1, sqlQueryBuilder()->select('pieces')->from('warehouse_products')->where(Operator::equals(['id_variation' => 1718604]))->execute()->fetchColumn()); } protected function getStockInRows() { $data = [ 371506 => new \stdClass(), 371505 => new \stdClass(), 371507 => new \stdClass(), ]; $data[371506]->checked = 2; $data[371506]->id = 371506; $data[371506]->id_product = 3822; $data[371506]->id_variation = null; $data[371505]->checked = 3; $data[371505]->id = 371505; $data[371505]->id_product = 101900; $data[371505]->id_variation = 1718603; $data[371507]->checked = 0; $data[371507]->id = 371507; $data[371507]->id_product = 101900; $data[371507]->id_variation = 1718604; return $data; } public function testSubmitNegativePiecesError() { $productStockIn = sqlQueryBuilder()->select('in_store')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $variationStockIn = sqlQueryBuilder()->select('in_store')->from('products_variations')->where(Operator::equals(['id' => 1718604]))->execute()->fetchColumn(); $this->assertEquals(0, $productStockIn); $this->assertEquals(0, $variationStockIn); $data = $this->prepValues(); $worker = $this->get(StockInWorker::class); $this->expectException(WarehouseBaseException::class); $result = $worker->SubmitStockIn(21888, $data); $this->assertTrue($result); } public function testSubmitNegativePieces() { $this->updateSQL('products_variations', ['in_store' => 5], ['id' => 1718604]); $productStockIn = sqlQueryBuilder()->select('in_store')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $variationStockIn = sqlQueryBuilder()->select('in_store')->from('products_variations')->where(Operator::equals(['id' => 1718604]))->execute()->fetchColumn(); $this->assertEquals(0, $productStockIn); $this->assertEquals(5, $variationStockIn); // Na stole by mělo být 5 ks variant které chci zničit $this->insertSQL('warehouse_products', [ 'id_product' => 101900, 'id_variation' => 1718604, 'pieces' => 5, 'over_supply' => 'N', 'id_position' => 7, ]); // Zkontroluji že jsou na stole $piecesOnTable = sqlQueryBuilder()->select('pieces')->from('warehouse_products')->where(Operator::equals([ 'id_product' => 101900, 'id_variation' => 1718604, 'id_position' => 7, ]))->execute()->fetchColumn(); $this->assertEquals(5, $piecesOnTable); $data = $this->prepValues(); $worker = $this->get(StockInWorker::class); $result = $worker->SubmitStockIn(21888, $data); $this->assertTrue($result); // Zkontroluji, že se odebraly ze stolu $piecesOnTable = sqlQueryBuilder()->select('pieces')->from('warehouse_products') ->where(Operator::equals([ 'id_product' => 3822, 'id_variation' => 1718603, 'id_position' => 7, ])) ->execute()->fetchColumn(); $this->assertFalse($piecesOnTable); $productStockIn = sqlQueryBuilder()->select('in_store')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $variationStockIn = sqlQueryBuilder()->select('in_store')->from('products_variations')->where(Operator::equals(['id' => 1718603]))->execute()->fetchColumn(); $this->assertEquals(5, $productStockIn); // in_store varianty je na nule $this->assertEquals(0, $variationStockIn); } public function prepValues() { $data = [ 371506 => new \stdClass(), 371505 => new \stdClass(), ]; $data[371506]->checked = 5; $data[371506]->id = 3715072; $data[371506]->id_product = 3822; $data[371506]->id_variation = null; $data[371505]->checked = -5; $data[371505]->id = 3715073; $data[371505]->id_product = 101900; $data[371505]->id_variation = 1718604; return $data; } public function testUpdatePriceBuy() { $productStockInBefore = sqlQueryBuilder()->select('price_buy')->from('products')->andWhere(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $variationStockInBefore = sqlQueryBuilder()->select('price_buy')->from('products_variations')->andWhere(Operator::equals(['id' => 1718603]))->execute()->fetchColumn(); $this->assertEquals(null, $productStockInBefore); $this->assertEquals(null, $variationStockInBefore); /** @var StockInWorker $worker */ $worker = $this->get(StockInWorker::class); $worker->submitStockIn(21886, $this->getStockInRows()); $productStockInAfter = sqlQueryBuilder()->select('price_buy')->from('products')->andWhere(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $variationStockInAfter = sqlQueryBuilder()->select('price_buy')->from('products_variations')->andWhere(Operator::equals(['id' => 1718603]))->execute()->fetchColumn(); $this->assertEquals(105.4504, $productStockInAfter); $this->assertEquals(1150, $variationStockInAfter); } public function testDeleteEmptyPositions() { /** @var StoreItemWorker $worker */ $worker = $this->get(StoreItemWorker::class); $cron = new CronListener($worker, $this->get(EmailSender::class), $this->get(UrlFinder::class)); $productPositions = $worker->getProductPositions(Operator::equals(['p.id' => 4000])); $positions = [ ['code' => 'A1-3', 'pieces' => 200, 'id_product_batch' => null, 'batch_code' => null, 'date_expiry' => null], ['code' => 'A2-3', 'pieces' => 5, 'id_product_batch' => null, 'batch_code' => null, 'date_expiry' => null], ['code' => 'PRIJEM', 'pieces' => 0, 'id_product_batch' => null, 'batch_code' => null, 'date_expiry' => null], // STUL "delete_empty": "Y" ['code' => 'A2-2', 'pieces' => 0, 'id_product_batch' => null, 'batch_code' => null, 'date_expiry' => null], // A2 "delete_empty": "N" ]; $this->assertEquals($positions, $productPositions); $cron->deleteEmptyPositions(); $productPositions = $worker->getProductPositions(Operator::equals(['p.id' => 4000])); $positions = [ ['code' => 'A1-3', 'pieces' => 200, 'id_product_batch' => null, 'batch_code' => null, 'date_expiry' => null], ['code' => 'A2-3', 'pieces' => 5, 'id_product_batch' => null, 'batch_code' => null, 'date_expiry' => null], ['code' => 'A2-2', 'pieces' => 0, 'id_product_batch' => null, 'batch_code' => null, 'date_expiry' => null], // A2 - "delete_empty": "N" ]; $this->assertEquals($positions, $productPositions); } public function testSubmitStockInToStore() { $productStockIn = sqlQueryBuilder()->select('in_store')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $variationStockIn = sqlQueryBuilder()->select('in_store')->from('products_variations')->where(Operator::equals(['id' => 1718603]))->execute()->fetchColumn(); $storesItems = sqlQueryBuilder()->select('quantity')->from('stores_items')->where(Operator::equals(['id_variation' => 1718603, 'id_store' => 2]))->execute()->fetchColumn(); $this->assertEquals(0, $productStockIn); $this->assertEquals(0, $variationStockIn); $this->assertEquals(0, $storesItems); $worker = $this->get(StockInWorker::class); $result = $worker->SubmitStockIn(21886, $this->getStockInRows()); $this->assertTrue($result); $productStockIn = sqlQueryBuilder()->select('in_store')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $variationStockIn = sqlQueryBuilder()->select('in_store')->from('products_variations')->where(Operator::equals(['id' => 1718603]))->execute()->fetchColumn(); $storesItems = sqlQueryBuilder()->select('quantity')->from('stores_items')->where(Operator::equals(['id_variation' => 1718603, 'id_store' => 2]))->execute()->fetchColumn(); $this->assertEquals(2, $productStockIn); $this->assertEquals(3, $variationStockIn); $this->assertEquals(3, $storesItems); } /** Testuju, že naskladnění do externího skladu nepovýší webový sklad, jen přesune na daný sklad */ public function testSubmitStockInToExternalStore() { $productStockIn = sqlQueryBuilder()->select('in_store')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $variationStockIn = sqlQueryBuilder()->select('in_store')->from('products_variations')->where(Operator::equals(['id' => 1718603]))->execute()->fetchColumn(); $storesItems = sqlQueryBuilder()->select('quantity')->from('stores_items')->where(Operator::equals(['id_variation' => 1718603, 'id_store' => 2]))->execute()->fetchColumn(); // Set store 2 to be external store sqlQuery('UPDATE stores SET type=2 WHERE id=2'); $this->assertEquals(0, $productStockIn); $this->assertEquals(0, $variationStockIn); $this->assertEquals(0, $storesItems); $worker = $this->get(StockInWorker::class); $result = $worker->SubmitStockIn(21886, $this->getStockInRows()); $this->assertTrue($result); $productStockIn = sqlQueryBuilder()->select('in_store')->from('products')->where(Operator::equals(['id' => 3822]))->execute()->fetchColumn(); $variationStockIn = sqlQueryBuilder()->select('in_store')->from('products_variations')->where(Operator::equals(['id' => 1718603]))->execute()->fetchColumn(); $storesItems = sqlQueryBuilder()->select('quantity')->from('stores_items')->where(Operator::equals(['id_variation' => 1718603, 'id_store' => 2]))->execute()->fetchColumn(); $this->assertEquals(0, $productStockIn); $this->assertEquals(0, $variationStockIn); $this->assertEquals(3, $storesItems); } }