forked from mapasculturais/mapasculturais
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* feat: add action para entidade * feat: add template do componente modal salvar modelo * feat: add regra front gerar modelo * feat: add redme como usar o componente * feat: aplica regra apenas para entidade oportunidade * feat: add requisição componente success * feat: add trait generate model * feat: add geração de modelo com especificação se é modelo * feat: define identificação se é modelo e se é oficial * feat: define padrão é modelo * feat: adiciona filtro retornar oportunidades diferente de modelos * feat: aplica regra no componente apenas para entidade oportunidade * feat: redireciona para meus modelos * feat: se modelo habilita ação de somente remover * feat: muda regra status quando modelo e gera fields e files para os forms * feat: add testes de validação da geração e sucesso do modelo
- Loading branch information
Showing
12 changed files
with
376 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
<?php | ||
namespace MapasCulturais\Traits; | ||
|
||
use MapasCulturais\App; | ||
use MapasCulturais\Entities\ProjectOpportunity; | ||
use MapasCulturais\Entity; | ||
use MapasCulturais\Definitions\Metadata AS DefinitionMetadata; | ||
|
||
trait EntityGenerateModel { | ||
|
||
private ProjectOpportunity $opportunity; | ||
private ProjectOpportunity $opportunityModel; | ||
|
||
function ALL_generatemodel(){ | ||
$app = App::i(); | ||
|
||
$this->requireAuthentication(); | ||
$this->opportunity = $this->requestedEntity; | ||
$this->opportunityModel = $this->generateModel(); | ||
|
||
$this->generateEvaluationMethods(); | ||
$this->generatePhases(); | ||
$this->generateMetadata(); | ||
$this->generateRegistrationFieldsAndFiles(); | ||
|
||
$this->opportunityModel->save(true); | ||
|
||
if($this->isAjax()){ | ||
$this->json($this->opportunity); | ||
}else{ | ||
$app->redirect($app->request->getReferer()); | ||
} | ||
} | ||
|
||
private function generateModel() : ProjectOpportunity | ||
{ | ||
$app = App::i(); | ||
|
||
$postData = $this->postData; | ||
|
||
$name = $postData['name']; | ||
$description = $postData['description']; | ||
|
||
$this->opportunityModel = clone $this->opportunity; | ||
|
||
$this->opportunityModel->setName($name); | ||
$this->opportunityModel->setStatus(-1); | ||
$this->opportunityModel->setShortDescription($description); | ||
$app->em->persist($this->opportunityModel); | ||
$app->em->flush(); | ||
|
||
return $this->opportunityModel; | ||
} | ||
|
||
private function generateEvaluationMethods() : void | ||
{ | ||
$app = App::i(); | ||
|
||
// duplica o método de avaliação para a oportunidade primária | ||
$evaluationMethodConfigurations = $app->repo('EvaluationMethodConfiguration')->findBy([ | ||
'opportunity' => $this->opportunity | ||
]); | ||
foreach ($evaluationMethodConfigurations as $evaluationMethodConfiguration) { | ||
$newMethodConfiguration = clone $evaluationMethodConfiguration; | ||
$newMethodConfiguration->setOpportunity($this->opportunityModel); | ||
$newMethodConfiguration->save(true); | ||
|
||
// duplica os metadados das configurações do modelo de avaliação | ||
foreach ($evaluationMethodConfiguration->getMetadata() as $metadataKey => $metadataValue) { | ||
$newMethodConfiguration->setMetadata($metadataKey, $metadataValue); | ||
$newMethodConfiguration->save(true); | ||
} | ||
} | ||
} | ||
|
||
private function generatePhases() : void | ||
{ | ||
$app = App::i(); | ||
|
||
$phases = $app->repo('Opportunity')->findBy([ | ||
'parent' => $this->opportunity | ||
]); | ||
foreach ($phases as $phase) { | ||
if (!$phase->getMetadata('isLastPhase')) { | ||
$newPhase = clone $phase; | ||
$newPhase->setParent($this->opportunityModel); | ||
|
||
foreach ($phase->getMetadata() as $metadataKey => $metadataValue) { | ||
if (!is_null($metadataValue) && $metadataValue != '') { | ||
$newPhase->setMetadata($metadataKey, $metadataValue); | ||
$newPhase->save(true); | ||
} | ||
} | ||
|
||
$newPhase->save(true); | ||
|
||
$evaluationMethodConfigurations = $app->repo('EvaluationMethodConfiguration')->findBy([ | ||
'opportunity' => $phase | ||
]); | ||
|
||
foreach ($evaluationMethodConfigurations as $evaluationMethodConfiguration) { | ||
$newMethodConfiguration = clone $evaluationMethodConfiguration; | ||
$newMethodConfiguration->setOpportunity($newPhase); | ||
$newMethodConfiguration->save(true); | ||
|
||
// duplica os metadados das configurações do modelo de avaliação para a fase | ||
foreach ($evaluationMethodConfiguration->getMetadata() as $metadataKey => $metadataValue) { | ||
$newMethodConfiguration->setMetadata($metadataKey, $metadataValue); | ||
$newMethodConfiguration->save(true); | ||
} | ||
} | ||
} | ||
|
||
if ($phase->getMetadata('isLastPhase')) { | ||
$publishDate = $phase->getPublishTimestamp(); | ||
} | ||
} | ||
|
||
if (isset($publishDate)) { | ||
$phases = $app->repo('Opportunity')->findBy([ | ||
'parent' => $this->opportunityModel | ||
]); | ||
|
||
foreach ($phases as $phase) { | ||
if ($phase->getMetadata('isLastPhase')) { | ||
$phase->setPublishTimestamp($publishDate); | ||
$phase->save(true); | ||
} | ||
} | ||
} | ||
} | ||
|
||
|
||
private function generateMetadata() : void | ||
{ | ||
foreach ($this->opportunity->getMetadata() as $metadataKey => $metadataValue) { | ||
if (!is_null($metadataValue) && $metadataValue != '') { | ||
$this->opportunityModel->setMetadata($metadataKey, $metadataValue); | ||
} | ||
} | ||
|
||
$this->opportunityModel->setMetadata('isModel', 1); | ||
$this->opportunityModel->setMetadata('isModelOfficial', 0); | ||
|
||
$this->opportunityModel->saveTerms(); | ||
} | ||
|
||
private function generateRegistrationFieldsAndFiles() : void | ||
{ | ||
foreach ($this->opportunity->getRegistrationFieldConfigurations() as $registrationFieldConfiguration) { | ||
$fieldConfiguration = clone $registrationFieldConfiguration; | ||
$fieldConfiguration->setOwnerId($this->opportunityModel->getId()); | ||
$fieldConfiguration->save(true); | ||
} | ||
|
||
foreach ($this->opportunity->getRegistrationFileConfigurations() as $registrationFileConfiguration) { | ||
$fileConfiguration = clone $registrationFileConfiguration; | ||
$fileConfiguration->setOwnerId($this->opportunityModel->getId()); | ||
$fileConfiguration->save(true); | ||
} | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
11 changes: 11 additions & 0 deletions
11
src/modules/Entities/components/opportunity-create-model/README.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Componente `<opportunity-create-model>` | ||
|
||
### Importando componente | ||
```PHP | ||
<?php | ||
$this->import('opportunity-create-model'); | ||
?> | ||
``` | ||
### Exemplos de uso | ||
```HTML | ||
<opportunity-create-model :entity="entity"></opportunity-create-model> |
62 changes: 62 additions & 0 deletions
62
src/modules/Entities/components/opportunity-create-model/script.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
app.component('opportunity-create-model', { | ||
template: $TEMPLATES['opportunity-create-model'], | ||
setup() { | ||
const messages = useMessages(); | ||
const text = Utils.getTexts('opportunity-create-model') | ||
return { text, messages } | ||
}, | ||
props: { | ||
entity: { | ||
type: Entity, | ||
required: true, | ||
}, | ||
}, | ||
|
||
data() { | ||
let sendSuccess = false; | ||
let formData = { | ||
name: this.entity.name, | ||
description: '', | ||
} | ||
|
||
return { sendSuccess, formData } | ||
}, | ||
|
||
methods: { | ||
async save() { | ||
this.__processing = this.text('Gerando modelo...'); | ||
|
||
const api = new API(this.entity.__objectType); | ||
|
||
let objt = this.formData; | ||
objt.entityId = this.entity.id; | ||
|
||
let error = null; | ||
|
||
if (error = this.validade(objt)) { | ||
let mess = ""; | ||
mess = this.text('Todos os campos são obrigatorio'); | ||
this.messages.error(mess); | ||
return; | ||
} | ||
|
||
await api.POST(`/opportunity/generatemodel/${objt.entityId}`, objt).then(res => { | ||
this.messages.success(this.text('Modelo gerado com sucesso')); | ||
this.sendSuccess = true; | ||
window.location.href = '/minhas-oportunidades/#mymodels'; | ||
}); | ||
}, | ||
validade(objt) { | ||
let result = null; | ||
let ignore = []; | ||
|
||
Object.keys(objt).forEach(function (item) { | ||
if (!objt[item] && !ignore.includes(item)) { | ||
result = item; | ||
return; | ||
} | ||
}); | ||
return result; | ||
}, | ||
}, | ||
}); |
Oops, something went wrong.