4 Commits
1.0.0 ... 1.0.1

5 changed files with 56 additions and 16 deletions

View File

@@ -7,7 +7,7 @@ from .routes_draft import draft_router
from .print import print_router
from .models import Contract, ContractDraft, ContractDraftStatus, Party, replace_variables_in_value
from .schemas import ContractCreate, ContractRead, ContractUpdate
from .schemas import ContractCreate, ContractRead, ContractUpdate, SignatureRead
from ..entity.models import Entity
from ..template.models import ProvisionTemplate
@@ -75,10 +75,12 @@ async def update(id: str, contract_form: ContractUpdate, user=Depends(get_curren
@contract_router.get("/signature/{signature_id}", response_description="")
async def get_signature(signature_id: str) -> Party:
async def get_signature(signature_id: str) -> SignatureRead:
contract = await Contract.find_by_signature_id(signature_id)
signature = contract.get_signature(signature_id)
return signature
signature_dict = signature.dict()
signature_dict['contract_label'] = contract.label
return signature_dict
@contract_router.post("/signature/{signature_id}", response_description="")

View File

@@ -2,7 +2,7 @@ import datetime
from typing import List, Literal
from enum import Enum
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field, validator
from beanie.operators import ElemMatch
from ..core.models import CrudDocument, RichtextSingleline, RichtextMultiline, DictionaryEntry
@@ -181,6 +181,19 @@ class Contract(CrudDocument):
lawyer: Entity = Field(title="Avocat en charge")
location: str = Field(title="Lieu")
date: datetime.date = Field(title="Date")
label: str = None
@validator("label", always=True)
def generate_label(cls, v, values, **kwargs):
if not v:
contract_label = values['title']
for p in values['parties']:
contract_label = contract_label + f" - {p.entity.label}"
contract_label = contract_label + f" {values['date'].strftime('%m/%d/%Y')}"
return contract_label
return v
class Settings(CrudDocument.Settings):
fulltext_search = ['name', 'title']

View File

@@ -73,3 +73,12 @@ class ContractCreate(Writer):
class ContractUpdate(BaseModel):
pass
class SignatureRead(BaseModel):
signature_uuid: str
entity: Entity
part: str
representative: Entity = None
signature_affixed: bool
contract_label: str

View File

@@ -28,8 +28,8 @@ class Individual(EntityType):
@property
def label(self) -> str:
if len(self.surnames) > 0:
return '{} "{}" {}'.format(self.firstname, self.surnames[0], self.lastname)
# if len(self.surnames) > 0:
# return '{} "{}" {}'.format(self.firstname, self.surnames[0], self.lastname)
return '{} {}'.format(self.firstname, self.lastname)

View File

@@ -1,6 +1,6 @@
import { Component, Input, OnInit } from '@angular/core';
import { Component, ElementRef, Input, OnInit } from '@angular/core';
import { ActivatedRoute, ParamMap } from "@angular/router";
import { DomSanitizer } from "@angular/platform-browser";
import { DomSanitizer, Meta } from "@angular/platform-browser";
import { ImageUploaderCrudService } from "@common/crud/crud.service";
@@ -98,12 +98,7 @@ export class ContractsCardComponent extends BaseContractsComponent{
<div class="row" *ngIf="!this.affixed">
<signature-drawer class="col-7"
(signatureDrawn$)="postSignature($event)"></signature-drawer>
<div class="col-5" i18n>
<p>Cette page est à la destination exclusive de <strong>{{ this.signatory }}</strong></p>
<p>Si vous n'êtes <strong>pas</strong> {{ this.signatory }}, veuillez <strong>fermer cette page immédiatement</strong> et surpprimer tous les liens en votre possession menant vers celle-ci.</p>
<p>En vous maintenant et/ou en interagissant avec cette page, vous enfreignez l'article L.229 du code pénal de l'Etat de San Andreas pour <strong>usurpation d'identité</strong> et vous vous exposez ainsi à une amende de 20 000$ ainsi qu'à des poursuites civiles.</p>
<p>Le cabinet Cooper, Hillman & Toshi LLC</p>
</div>
<div class="col-5" i18n [innerHTML]="this.legalText"></div>
</div>
</ng-template>
</ngb-panel>
@@ -117,10 +112,13 @@ export class ContractsSignatureComponent implements OnInit {
affixed = false;
public legalText: string = "";
constructor(
private route: ActivatedRoute,
private sanitizer: DomSanitizer,
private crudService: ImageUploaderCrudService,
private meta: Meta,
) {}
ngOnInit() {
@@ -134,8 +132,26 @@ export class ContractsSignatureComponent implements OnInit {
} else {
this.signatory = this.signature.entity.entity_data.firstname + " " + this.signature.entity.entity_data.lastname;
}
})
})
this.legalText = `
<p>Cette page est à la destination exclusive de <strong>${ this.signatory }</strong></p>
<p>Si vous n'êtes <strong>pas</strong> ${ this.signatory }, veuillez <strong>fermer cette page immédiatement</strong> et surpprimer tous les liens en votre possession menant vers celle-ci.</p>
<p>En vous maintenant et/ou en interagissant avec cette page, vous enfreignez l'article L.229 du code pénal de l'Etat de San Andreas pour <strong>usurpation d'identité</strong> et vous vous exposez ainsi à une amende de 20 000$ ainsi qu'à des poursuites civiles.</p>
<p>Le cabinet Cooper, Hillman & Toshi LLC</p>
`
this.meta.updateTag({
name: 'og:title',
property: 'og:title',
content: this.signature.contract_label});
this.meta.updateTag({
name: 'og:description',
property: 'og:description',
content: this.legalText.replace(/<[^>]*>/g, '').trim()
});
this.meta.updateTag({ name: 'og:image', content: `${location.origin}/assets/logo.png` });
});
});
}
getPreview() {