Skip to content
Snippets Groups Projects
Commit 0b1b84f3 authored by Sebastien ANDRE's avatar Sebastien ANDRE
Browse files

Merge branch 'hotline#170571_panier_non_remonte_sur_bokeh' into 'master'

[RTko] hotline : #170571 : cosmo import basket with deleted records

See merge request !4779
parents 8b452464 2d4603a1
1 merge request!4779[RTko] hotline : #170571 : cosmo import basket with deleted records
Pipeline #24314 passed with stage
in 27 minutes and 7 seconds
- correctif #170571 : Cosmogramme : Import de panier avec des notices supprimées, doit aussi les supprimer dans le panier coté Bokeh
\ No newline at end of file
......@@ -26,14 +26,15 @@ class Class_Cosmogramme_Integration_PhasePanier
const MY_ID = 15;
protected $_label = 'Intégration des fichiers paniers';
protected array $_idsigb_basket = [];
protected function _init($new_phase) {}
protected function _validateProfil($integration) {
if (!$profil = $integration->getProfilDonnees())
if ( ! $profil = $integration->getProfilDonnees())
return false;
if (!$profil->isBaskets())
if ( ! $profil->isBaskets())
return false;
$errors = [];
......@@ -77,11 +78,11 @@ class Class_Cosmogramme_Integration_PhasePanier
protected function mapRecordColumns($integration, $datas) {
if(!$fields = $this->getFields($integration->getProfilDonnees()))
if ( ! $fields = $this->getFields($integration->getProfilDonnees()))
return [];
$map = [];
foreach($fields as $k => $name)
foreach ($fields as $k => $name)
$map[strtolower($name)] = isset($datas[$k]) ? $datas[$k] : '';
return $map;
......@@ -95,10 +96,10 @@ class Class_Cosmogramme_Integration_PhasePanier
protected function importBasketRecord($datas, $integration) {
if (!$map = $this->mapRecordColumns($integration, $datas))
if ( ! $map = $this->mapRecordColumns($integration, $datas))
return $this->_log->error($this->_('Pas de donnée trouvée avec le profil de données sélectionné'));
if (!$map['libelle'])
if ( ! $map['libelle'])
return $this->_log->log($this->_('Ligne non traitée car le libellé n\'a pas pu être lu'));
$id_int_bib = $integration->getIdBib();
......@@ -116,13 +117,7 @@ class Class_Cosmogramme_Integration_PhasePanier
$owner = $owners->first();
$id_sigb = $map['id_sigb'];
$basket = Class_PanierNotice::findFirstBy(['id_sigb' => $id_sigb]);
if ($id_sigb == null || !$basket)
$basket = Class_PanierNotice::newForUser($owner);
$basket
$this->_basketByIdSIGB($map, $owner)
->setLibelle($map['libelle'])
->setIdSigb($map['id_sigb'])
->setIdIntBib($id_int_bib)
......@@ -134,6 +129,20 @@ class Class_Cosmogramme_Integration_PhasePanier
}
protected function _basketByIdSIGB(array $map, Class_Users $owner) : Class_PanierNotice {
$id_sigb = $map['id_sigb'];
if ($basket = ($this->_idsigb_basket[$id_sigb] ?? null))
return $basket;
$this->_idsigb_basket [$id_sigb] =
(($id_sigb && ($basket = Class_PanierNotice::findFirstBy(['id_sigb' => $id_sigb])))
? $basket->setNotices('')
: Class_PanierNotice::newForUser($owner));
return $this->_idsigb_basket[$id_sigb];
}
protected function _getItem(string $id_notice_sigb, int $id_int_bib) : Class_Exemplaire {
return ($items = Class_Exemplaire::findAllBy(['id_origine' => $id_notice_sigb]))
? $this->_findItem($items, $id_notice_sigb, $id_int_bib)
......
......@@ -19,8 +19,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
abstract class PhasePanierTestCase extends Class_Cosmogramme_Integration_PhaseTestCase {
protected $_storm_default_to_volatile = true;
protected function _getPreviousPhase() {
return (new Class_Cosmogramme_Integration_Phase(14))
......@@ -69,6 +69,7 @@ abstract class PhasePanierTestCase extends Class_Cosmogramme_Integration_PhaseTe
public function setUp() {
parent::setUp();
$this->_phase = $this->_buildPhase('Panier')
->setMemoryCleaner(function() {})
->setPrinter($this->_printer)
......@@ -80,8 +81,10 @@ abstract class PhasePanierTestCase extends Class_Cosmogramme_Integration_PhaseTe
class PhasePanierFullImportWithWrongProfilTest extends PhasePanierTestCase {
protected function _prepareFixtures() {
parent::_prepareFixtures();
Class_IntProfilDonnees::find(102)
->setAttributs([3 => ['champs' => 'LIBELLE']])
->save();
......@@ -110,6 +113,7 @@ class PhasePanierFullImportWithWrongProfilTest extends PhasePanierTestCase {
abstract class PhasePanierKohaTestCase extends PhasePanierTestCase {
protected function _prepareFixtures() {
parent::_prepareFixtures();
......@@ -185,6 +189,7 @@ abstract class PhasePanierKohaTestCase extends PhasePanierTestCase {
class PhasePanierFullImportWithLinkedToDomainTest extends PhasePanierKohaTestCase {
protected function _prepareFixtures() {
parent::_prepareFixtures();
......@@ -202,6 +207,7 @@ class PhasePanierFullImportWithLinkedToDomainTest extends PhasePanierKohaTestCas
'libelle' => 'will not be killed due to domain link',
'notices' => 'VOL714'])
->setDomaineIds(42);
$linked_to_domain_cart->assertSave();
}
......@@ -223,6 +229,7 @@ class PhasePanierFullImportWithLinkedToDomainTest extends PhasePanierKohaTestCas
class PhasePanierFullImportTest extends PhasePanierKohaTestCase {
/** @test */
public function newPhaseShouldBe17() {
$this->assertTrue($this->_phase->isId(15));
......@@ -384,6 +391,7 @@ class PhasePanierFullImportTest extends PhasePanierKohaTestCase {
class PhasePanierFullImportWithCSVSemicolonTest extends PhasePanierFullImportTest {
protected function _prepareFixtures() {
parent::_prepareFixtures();
......@@ -413,8 +421,10 @@ class PhasePanierFullImportWithCSVSemicolonTest extends PhasePanierFullImportTes
class PhasePanierFullImportWithCSVPipedTest extends PhasePanierFullImportTest {
protected function _prepareFixtures() {
parent::_prepareFixtures();
$this->fixture(Class_IntProfilDonnees::class,
['id' => 104,
'libelle' => 'Koha Baskets',
......@@ -441,8 +451,10 @@ class PhasePanierFullImportWithCSVPipedTest extends PhasePanierFullImportTest {
class PhasePanierPartialImportTest extends PhasePanierKohaTestCase {
protected function _prepareFixtures() {
parent::_prepareFixtures();
Class_Cosmogramme_Integration::find(999)->beIncrementImport()->save();
}
......@@ -460,6 +472,7 @@ class PhasePanierPartialImportTest extends PhasePanierKohaTestCase {
abstract class PhasePanierNanookTestCase extends PhasePanierTestCase {
protected $_basket;
protected function _prepareFixtures() {
......@@ -495,6 +508,7 @@ abstract class PhasePanierNanookTestCase extends PhasePanierTestCase {
/** @see http://forge.afi-sa.fr/issues/33712 */
class PhasePanierNanookTest extends PhasePanierNanookTestCase {
protected $_basket;
protected function _prepareFixtures() {
......@@ -513,6 +527,7 @@ class PhasePanierNanookTest extends PhasePanierNanookTestCase {
public function setUp() {
parent::setUp();
$this->_basket = Class_PanierNotice::findFirstBy([]);
}
......@@ -552,6 +567,7 @@ class PhasePanierNanookTest extends PhasePanierNanookTestCase {
/** @see http://forge.afi-sa.fr/issues/163609 */
class PhasePanierNanookWithGhostItemsTest extends PhasePanierNanookTestCase {
protected $_basket;
protected function _prepareFixtures() {
......@@ -598,3 +614,77 @@ class PhasePanierNanookWithGhostItemsTest extends PhasePanierNanookTestCase {
$this->assertContains('BOB MORANE AVENTURIER',Class_PanierNotice::findFirstBy(['id_sigb' => 509])->getNotices());
}
}
/* @see https://forge.afi-sa.net/issues/170571 */
class PhasePanierFullImportWithDeletedRecordsTest extends PhasePanierTestCase {
protected function _prepareFixtures() {
parent::_prepareFixtures();
$this->fixture(Class_PanierNotice::class,
['id' => 111,
'id_sigb' => 23,
'id_int_bib' => 2,
'libelle' => 'Zoom Cuba',
'notices' => 'ALPHAKEY-1;ALPHAKEY-2;ALPHAKEY-3;ALPHAKEY-4']);
$this->fixture(Class_Notice::class,
['id' => 222,
'type_doc' => 1,
'clef_alpha' => 'ALPHAKEY-1',
'exemplaires' => [$this->fixture(Class_Exemplaire::class,
['id' => 333,
'id_int_bib' => 2,
'id_origine' => 44444])]]);
$this->fixture(Class_Notice::class,
['id' => 223,
'type_doc' => 1,
'clef_alpha' => 'ALPHAKEY-2',
'exemplaires' => [$this->fixture(Class_Exemplaire::class,
['id' => 334,
'id_int_bib' => 2,
'id_origine' => 44445])]]);
$this->fixture(Class_Notice::class,
['id' => 224,
'type_doc' => 1,
'clef_alpha' => 'ALPHAKEY-3',
'exemplaires' => [$this->fixture(Class_Exemplaire::class,
['id' => 335,
'id_int_bib' => 2,
'id_origine' => 44446])]]);
$this->fixture(Class_Notice::class,
['id' => 225,
'type_doc' => 1,
'clef_alpha' => 'ALPHAKEY-4',
'exemplaires' => [$this->fixture(Class_Exemplaire::class,
['id' => 336,
'id_int_bib' => 2,
'id_origine' => 44447])]]);
Class_Cosmogramme_Integration::find(999)
->setFichier('baskets-deleted-records.txt')
->setProfilDonnees(Class_IntProfilDonnees::find(102))
->save();
}
/** @test */
public function noticesAlphaKeyShouldBeUpdatedWith2Records() {
$this->assertEquals('ALPHAKEY-1;ALPHAKEY-2', Class_PanierNotice::find(111)->getNotices());
}
/** @test */
public function noticeId224ShouldNotHaveBeenDeleted() {
$this->assertNotNull(Class_Notice::find(224));
}
/** @test */
public function noticeId225ShouldNotHaveBeenDeleted() {
$this->assertNotNull(Class_Notice::find(225));
}
}
23,Zomm Cuba,,email@mail.com,1,44444
23,Zomm Cuba,,email@mail.com,1,44445
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment