Skip to content
Snippets Groups Projects
Commit eeb07cef authored by Laurent's avatar Laurent
Browse files

hotline #45936 do not recreate records on total import

parent 35c18b48
Branches
Tags
4 merge requests!1837Master,!1836Hotline master,!1835Stable,!1828Hotline#45936 probleme restituation notices dans kiosques
- ticket #45936 : Cosmogramme / intégration sans dédoublonnage: mise à jour des exemplaires au lieu de les remplacer
\ No newline at end of file
......@@ -256,6 +256,16 @@ class Class_log
public function addError($message) {
$this->ecrire('<br><span class="rouge">'.$message.'</span><br>');
}
public function addSuccess($message) {
$this->ecrire('<span class="vert">' . $message . '</span><br>');
}
public function addInfo($message) {
$this->ecrire('<br><span class="violet">' . $message . '</span><br>');
}
}
?>
\ No newline at end of file
......@@ -57,15 +57,16 @@ class Class_Cosmogramme_Integration_PhaseNotice
$data_source = $integration->getDataSource();
if (!$data_source->isHttp()
&& !$this->getFileSystem()->filesize($data_source->getUri())) {
$this->_log->ecrire('<span class="rouge">Le fichier d\'import total est vide : aucun exemplaire supprimé.</span><br><br>');
$this->_log->addError($this->_('Le fichier d\'import total est vide : aucun exemplaire supprimé.'));
return;
}
$id_int_bib = $integration->getIdBib();
$del_msg = '<br><span class="violet">Supression des exemplaires</span><br>';
$this->_log->addInfo($this->_('Préparation des données'));
$nb = Class_Exemplaire::countBy(['id_int_bib' => $id_int_bib]);
Class_Exemplaire::deleteBy(['id_int_bib' => $id_int_bib]);
$nb = $this->_markItemsToBeDeleted($id_int_bib);
$this->_log->addSuccess($this->_('%d exemplaire(s) marqué(s) pour suppression',
$nb));
$nb1 = Class_NoticeSuccincte::countBy(['id_bib' => $id_int_bib]);
Class_NoticeSuccincte::deleteBy(['id_bib' => $id_int_bib]);
......@@ -73,11 +74,25 @@ class Class_Cosmogramme_Integration_PhaseNotice
Class_CodifThesaurus::deleteBy(['code' => null,
'rules' => null]);
$del_msg .= '<span class="vert">' . $nb . ' exemplaires supprimés</span><br>';
$del_msg .= '<span class="vert">' . $nb1 . ' notices succinctes supprimées</span><br><br>';
$this->_log->ecrire($del_msg);
$this->_log->addSuccess($this->_('%d notices succinctes supprimées', $nb1));
}
protected function _markItemsToBeDeleted($id_int_bib) {
$total = 0;
while( $items = Class_Exemplaire::findAllBy(['id_int_bib' => $id_int_bib,
'to_delete' => false,
'limit' => 1000])) {
array_map(function($item) { $item->setToDelete(true)->save(); },
$items);
$total += count($items);
}
return $total;
}
/** should return true if $line must not be processed */
protected function _shouldIgnoreLine($line, $integration) {}
......@@ -88,13 +103,22 @@ class Class_Cosmogramme_Integration_PhaseNotice
/** hooked called after the file has been fully processed */
protected function _afterFileProcessed($integration) {}
protected function _afterFileProcessed($integration) {
$args = ['id_int_bib' => $integration->getIdBib(),
'to_delete' => true];
$nb = Class_Exemplaire::countBy($args);
Class_Exemplaire::deleteBy($args);
$this->_log->addSuccess($this->_('%d exemplaire(s) supprimé(s)', $nb));
}
protected function _headerOfHook($integration) {
$type_doc = $integration->getTypeDoc();
return ($type_doc > '')
? '<span class="bib">Type de doc. forcé : ' . $type_doc . '</span><br>'
? ('<span class="bib">'
. $this->_('Type de doc. forcé : %s', $type_doc)
. '</span><br>')
: '';
}
......
......@@ -51,7 +51,8 @@ class Class_Exemplaire extends Storm_Model_Abstract {
'zone995' => '',
'id_bib' => 0,
'activite' => null,
'date_nouveaute' => ''];
'date_nouveaute' => '',
'to_delete' => false];
protected $_sigb_exemplaire;
......
......@@ -107,7 +107,7 @@ class PhaseNoticeOAITest extends PhaseNoticeOAITestCase {
/** @test */
public function secondItemUrlShouldBeSudoc() {
$this->assertEquals('http://www.sudoc.fr/003498263',
Class_Exemplaire::find(2)->getUrl());
Class_Exemplaire::find(3)->getUrl());
}
......
......@@ -264,4 +264,70 @@ class PhaseNoticeUpdatingTest extends PhaseNoticeTestCase {
public function phaseCounterShouldContain7RecordsRenewed() {
$this->assertEquals(7, $this->_phase->getCount(Class_Cosmogramme_Integration_Phase::RECORD_RENEW));
}
}
class PhaneNoticeTotalImportUpdateWithDoubleSearchNoneTest extends PhaseNoticeTestCase {
protected function _prepareFixtures() {
parent::_prepareFixtures();
$this->fixture('Class_CosmoVar',
['id' => 'mode_doublon',
'valeur' => Class_CosmoVar::DOUBLE_SEARCH_NONE]);
$this->fixture('Class_Notice',
['id' => 1,
'qualite' => 1,
'unimarc' => '',
'exemplaires' => [
$this->fixture('Class_Exemplaire',
['id' => 13455,
'id_int_bib' => 2,
'to_delete' => false,
'id_origine' => '00439131'])
]]);
$this->fixture('Class_Notice',
['id' => 2,
'titre_principal' => 'delete me',
'auteur_principal' => 'delete moi',
'genre' => 'autokill',
'matiere' => 'doubtful',
'qualite' => 1,
'exemplaires' => [
$this->fixture('Class_Exemplaire',
['id' => 13456,
'id_int_bib' => 2,
'to_delete' => false,
'id_origine' => 'xxx6666xxx'])
]]);
}
/** @test */
public function recordPetitBonnetShouldHaveOneITem() {
$this->assertCount(1, Class_Notice::find(1)->getExemplaires());
}
/** @test */
public function recordDeleteMeShouldNotHaveItems() {
$this->assertEmpty(Class_Notice::find(2)->getExemplaires());
}
/** @test */
public function logShouldContainsTwoItemsMarkedForUpdate() {
$this->assertLogContains('2 exemplaire(s) marqué(s) pour suppression');
}
/** @test */
public function logShouldContainsOneItemDeleted() {
$this->assertLogContains('2 exemplaire(s) supprimé(s)');
}
}
\ No newline at end of file
......@@ -39,6 +39,8 @@ abstract class Class_Cosmogramme_Integration_PhaseTestCase extends ModelTestCase
$append_log = function($content) { $this->_log_content .= $content; };
$this->_log = $this->mock()
->whenCalled('addError')->willDo($append_log)
->whenCalled('addSuccess')->willDo($append_log)
->whenCalled('addInfo')->willDo($append_log)
->whenCalled('ecrire')->willDo($append_log);
$this->_chrono = new Class_Cosmogramme_Integration_Chronometre();
......
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