Aggiornata gestione di Personale Orario

This commit is contained in:
Giancarlo Panichi 2022-10-24 16:31:38 +02:00
parent 45a041cc83
commit eb12311a60
18 changed files with 966 additions and 21 deletions

View File

@ -24,10 +24,10 @@ public class SyncConfiguration {
}
@Scheduled(cron = "0 50 7 * * ?")
public void cronJobSch() {
public void cronJobSyncRead() {
LocalDateTime start = LocalDateTime.now();
logger.info("Scheduled Sync Start : {}", start);
logger.info("Scheduled Sync Read Start : {}", start);
try {
syncService.executeReads();
@ -36,7 +36,28 @@ public class SyncConfiguration {
}
LocalDateTime end = LocalDateTime.now();
logger.info("Scheduled Sync End : {}", end);
logger.info("Scheduled Sync Read End : {}", end);
}
@Scheduled(cron = "0 0 3 * * ?")
public void cronJobSyncWrite() {
LocalDateTime start = LocalDateTime.now();
logger.info("Scheduled Sync Write Start : {}", start);
String year=String.valueOf(start.getYear());
String month=String.valueOf(start.getMonthValue());
try {
syncService.executeWritesScheduled(year, month);
} catch (Exception e) {
logger.error(e.getLocalizedMessage(), e);
}
LocalDateTime end = LocalDateTime.now();
logger.info("Scheduled Sync Write End : {}", end);
}
}

View File

@ -216,6 +216,15 @@ public class SyncService {
siMasterLogService.closeFluxWrites(fluxId, writeTabs());
}
public void executeWritesScheduled(String year, String month) throws Exception {
setBWriteTables();
List<TabsSI> tabsSI = tabsSIService.getAllTabsSI();
Long fluxId = siMasterLogService.startFluxWrites();
writeScheduledData(fluxId, tabsSI, year, month);
siMasterLogService.closeFluxWrites(fluxId, writeTabs());
}
public void executeWritesOrario() throws Exception {
setBWriteTables();
List<TabsSI> tabsSI = tabsSIService.getAllTabsSI();
@ -870,6 +879,38 @@ public class SyncService {
return writeTabs;
}
private void writeScheduledData(Long fluxId, List<TabsSI> tabsSI, String year, String month) throws Exception {
logger.info("Report {}-{}", year, month);
LocalDateTime now = LocalDateTime.now();
// checkValidMonthToSend(year, month);
for (TabsSI tab : tabsSI) {
logger.info("TabSI: {}", tab);
if (tab.getOperazioni() != null && !tab.getOperazioni().isEmpty()
&& tab.getOperazioni().compareTo("W") == 0) {
if (tab.getNome() == null || tab.getNome().isEmpty()) {
continue;
}
switch (tab.getNome()) {
case "aspettative":
syncAspettative(fluxId, tab, year, month, now);
break;
case "orario":
syncOrario(fluxId, tab);
break;
case "pers_orario":
syncPersOrario(fluxId, tab, year, month, now);
break;
default:
break;
}
}
}
}
private void writeOrarioData(Long fluxId, List<TabsSI> tabsSI) {
for (TabsSI tab : tabsSI) {
logger.info("TabSI: {}", tab);
@ -1513,7 +1554,7 @@ public class SyncService {
}
logger.info("Peronale Orario scritto su SI: {}",count);
logger.info("Personale Orario scritto su SI: {}",count);
logger.info("SIPersOrario Updated");
bpers_orario = true;

View File

@ -72,7 +72,7 @@ public class SyncResource {
*
*/
@GetMapping("/sync/writes")
@PreAuthorize("hasAuthority(\"" + AuthoritiesConstants.ADMIN + "\")")
@PreAuthorize("hasAuthority(\"" + AuthoritiesConstants.ADMIN + "\",\""+AuthoritiesConstants.USER+"\")")
public ResponseEntity<Void> syncWrites(@RequestParam("year") String year, @RequestParam("month") String month)
throws Exception {
logger.info("REST request syncWrites");
@ -85,6 +85,35 @@ public class SyncResource {
return res;
}
/**
* {@code GET /sync/writesscheduled} : Report from ePAS and update SistemaInformativo scheduled info.
*
* @param year the year.
* @param month the month.
* @return the {@link ResponseEntity} with status {@code 201 (Executed)} or with
* status {@code 400 (Bad Request)} if there is a error.
* @throws Exception
*
*
*/
@GetMapping("/sync/writesscheduled")
@PreAuthorize("hasAuthority(\"" + AuthoritiesConstants.ADMIN + "\",\""+AuthoritiesConstants.USER+"\")")
public ResponseEntity<Void> syncWritesScheduled(@RequestParam("year") String year, @RequestParam("month") String month)
throws Exception {
logger.info("REST request syncWritesScheduled");
ResponseEntity<Void> res;
syncService.executeWritesScheduled(year, month);
String msg = "Sincronizzazione delle scritture schedulate eseguita correttamente.";
logger.info(msg);
res = ResponseEntity.noContent().headers(HeaderUtil.createAlert(applicationName, msg, "")).build();
return res;
}
/**
* {@code GET /sync/test} : Test api.
@ -181,7 +210,7 @@ public class SyncResource {
*
*/
@GetMapping("/sync/writesSingleTimeCards")
@PreAuthorize("hasAuthority(\"" + AuthoritiesConstants.ADMIN + "\")")
@PreAuthorize("hasAuthority(\"" + AuthoritiesConstants.ADMIN + "\",\""+AuthoritiesConstants.USER+"\")")
public ResponseEntity<Void> syncSingleWritesTimeCards(@RequestParam("year") String year,
@RequestParam("month") String month, @RequestParam("fiscalCode") String fc) throws Exception {
logger.info("REST request syncSingleWritesTimeCards)");

View File

@ -26,6 +26,13 @@ import { RouterModule } from '@angular/router';
pageTitle: 'Leaves',
},
},
{
path: 'persorario',
loadChildren: () => import('./persorario/persorario.module').then(m => m.PersOrarioModule),
data: {
pageTitle: 'Pers Orario',
},
},
]),
],
})

View File

@ -0,0 +1,23 @@
<form *ngIf="persOrario" name="deleteForm" (ngSubmit)="confirmDelete(persOrario?.id!)">
<div class="modal-header">
<h4 class="modal-title">Confirm delete operation</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true" (click)="cancel()">&times;</button>
</div>
<div class="modal-body">
<jhi-alert-error></jhi-alert-error>
<p>Are you sure you want to delete this Personale Orario?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" (click)="cancel()">
<fa-icon icon="ban"></fa-icon>&nbsp;<span>Cancel</span>
</button>
<button type="submit" class="btn btn-danger">
<fa-icon icon="times"></fa-icon>&nbsp;<span>Delete</span>
</button>
</div>
</form>

View File

@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { JhiEventManager } from 'ng-jhipster';
import { PersOrario } from './persorario.model';
import { PersOrarioService } from './persorario.service';
@Component({
selector: 'jhi-persorario-delete-dialog',
templateUrl: './persorario-delete-dialog.component.html',
})
export class PersOrarioDeleteDialogComponent {
persOrario?: PersOrario;
constructor(private persOrarioService: PersOrarioService, public activeModal: NgbActiveModal, private eventManager: JhiEventManager) {}
cancel(): void {
this.activeModal.dismiss();
}
confirmDelete(id: string): void {
this.persOrarioService.delete(id).subscribe(() => {
this.eventManager.broadcast('persOrarioListModification');
this.activeModal.close();
});
}
}

View File

@ -0,0 +1,69 @@
<div class="row justify-content-center">
<div class="col-8">
<div *ngIf="persOrario">
<h2>
<span>Personale Orario</span> [<b>{{ persOrario.id }}</b>]
</h2>
<dl class="row-md jh-entity-details">
<dt><span>Id</span></dt>
<dd>{{ persOrario.id }}</dd>
<dt><span>Id Persona</span></dt>
<dd>{{ persOrario.idPersona }}</dd>
<dt><span>Codice Fiscale</span></dt>
<dd>{{ persOrario.cf }}</dd>
<dt><span>Dal</span></dt>
<dd>{{ persOrario.dal }}</dd>
<dt><span>Al</span></dt>
<dd>{{ persOrario.al }}</dd>
<dt><span>Descrizione</span></dt>
<dd>{{ persOrario.descrizione }}</dd>
<dt><span>Lun</span></dt>
<dd>{{ persOrario.lun }}</dd>
<dt><span>Mar</span></dt>
<dd>{{ persOrario.mar }}</dd>
<dt><span>Mer</span></dt>
<dd>{{ persOrario.mer }}</dd>
<dt><span>Gio</span></dt>
<dd>{{ persOrario.gio }}</dd>
<dt><span>Ven</span></dt>
<dd>{{ persOrario.ven }}</dd>
<dt><span>Sab</span></dt>
<dd>{{ persOrario.sab }}</dd>
<dt><span>Percentuale</span></dt>
<dd>{{ persOrario.percentuale }}</dd>
<dt><span>Turno</span></dt>
<dd>{{ persOrario.turno }}</dd>
<dt><span>Ore Turno</span></dt>
<dd>{{ persOrario.oreTurno }}</dd>
<dt><span>Festivo</span></dt>
<dd>{{ persOrario.festivo }}</dd>
<dt><span>Notturno</span></dt>
<dd>{{ persOrario.notturno }}</dd>
<dt><span>Data Mod</span></dt>
<dd>{{ persOrario.dataMod }}</dd>
</dl>
<button type="submit" routerLink="../../" class="btn btn-info">
<fa-icon icon="arrow-left"></fa-icon>&nbsp;<span>Back</span>
</button>
</div>
</div>
</div>

View File

@ -0,0 +1,18 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { PersOrario } from './persorario.model';
@Component({
selector: 'jhi-persorario-detail',
templateUrl: './persorario-detail.component.html',
})
export class PersOrarioDetailComponent implements OnInit {
persOrario: PersOrario | null = null;
constructor(private route: ActivatedRoute) {}
ngOnInit(): void {
this.route.data.subscribe(({ persOrario }) => (this.persOrario = persOrario));
}
}

View File

@ -0,0 +1,247 @@
<div class="row justify-content-center">
<div class="col-8">
<form name="editForm" role="form" novalidate (ngSubmit)="save()"
[formGroup]="editForm">
<h2 id="myPersOrarioLabel">Create or edit Personale Orario</h2>
<div *ngIf="persOrario">
<jhi-alert-error></jhi-alert-error>
<div class="form-group" [hidden]="!persOrario.id">
<label>Id</label> <input type="text" class="form-control" name="id"
formControlName="id" readonly>
</div>
<div class="form-group">
<label class="form-control-label">Id Persona</label> <input
type="text" class="form-control" name="idPersona"
formControlName="idPersona">
<div
*ngIf="editForm.get('idPersona')!.invalid && (editForm.get('idPersona')!.dirty || editForm.get('idPersona')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('idPersona')?.errors?.required"> This
field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Codice Fiscale</label> <input
type="text" class="form-control" name="cf" formControlName="cf">
<div
*ngIf="editForm.get('cf')!.invalid && (editForm.get('cf')!.dirty || editForm.get('cf')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('cf')?.errors?.required"> This field
is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Dal</label> <input
type="text" class="form-control" name="dal"
formControlName="dal">
<div
*ngIf="editForm.get('dal')!.invalid && (editForm.get('dal')!.dirty || editForm.get('dal')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('dal')?.errors?.required">
This field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Al</label> <input
type="text" class="form-control" name="al"
formControlName="al">
<div
*ngIf="editForm.get('al')!.invalid && (editForm.get('al')!.dirty || editForm.get('al')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('al')?.errors?.required"> This
field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Descrizione</label>
<input type="text" class="form-control"
name="descrizione"
formControlName="descrizione">
<div
*ngIf="editForm.get('descrizione')!.invalid && (editForm.get('descrizione')!.dirty || editForm.get('descrizione')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('descrizione')?.errors?.required">
This field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Lun</label> <input
type="text" class="form-control" name="lun"
formControlName="lun">
<div
*ngIf="editForm.get('lun')!.invalid && (editForm.get('lun')!.dirty || editForm.get('lun')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('lun')?.errors?.required">
This field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Mar</label> <input
type="text" class="form-control" name="mar"
formControlName="mar">
<div
*ngIf="editForm.get('mar')!.invalid && (editForm.get('mar')!.dirty || editForm.get('mar')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('mar')?.errors?.required">
This field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Mer</label> <input
type="text" class="form-control" name="mer"
formControlName="mer">
<div
*ngIf="editForm.get('mer')!.invalid && (editForm.get('mer')!.dirty || editForm.get('mer')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('mer')?.errors?.required">
This field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Gio</label> <input
type="text" class="form-control" name="gio"
formControlName="gio">
<div
*ngIf="editForm.get('gio')!.invalid && (editForm.get('gio')!.dirty || editForm.get('gio')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('gio')?.errors?.required">
This field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Ven</label> <input
type="text" class="form-control" name="ven"
formControlName="ven">
<div
*ngIf="editForm.get('ven')!.invalid && (editForm.get('ven')!.dirty || editForm.get('ven')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('ven')?.errors?.required">
This field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Sab</label> <input
type="text" class="form-control" name="sab"
formControlName="sab">
<div
*ngIf="editForm.get('sab')!.invalid && (editForm.get('sab')!.dirty || editForm.get('sab')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('sab')?.errors?.required">
This field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Percentuale</label> <input
type="text" class="form-control" name="percentuale"
formControlName="percentuale">
<div
*ngIf="editForm.get('percentuale')!.invalid && (editForm.get('percentuale')!.dirty || editForm.get('percentuale')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('percentuale')?.errors?.required">
This field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Turno</label> <input
type="text" class="form-control" name="turno"
formControlName="turno">
<div
*ngIf="editForm.get('turno')!.invalid && (editForm.get('turno')!.dirty || editForm.get('turno')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('turno')?.errors?.required">
This field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Ore Turno</label> <input type="text"
class="form-control" name="oreTurno" formControlName="oreTurno">
<div
*ngIf="editForm.get('oreTurno')!.invalid && (editForm.get('oreTurno')!.dirty || editForm.get('oreTurno')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('oreTurno')?.errors?.required"> This
field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Festivo</label> <input type="text"
class="form-control" name="festivo" formControlName="festivo">
<div
*ngIf="editForm.get('festivo')!.invalid && (editForm.get('festivo')!.dirty || editForm.get('festivo')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('festivo')?.errors?.required"> This
field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Notturno</label> <input type="text"
class="form-control" name="notturno" formControlName="notturno">
<div
*ngIf="editForm.get('notturno')!.invalid && (editForm.get('notturno')!.dirty || editForm.get('notturno')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('notturno')?.errors?.required"> This
field is required. </small>
</div>
</div>
<div class="form-group">
<label class="form-control-label">Data Mod</label> <input
type="text" class="form-control" name="dataMod"
formControlName="dataMod">
<div
*ngIf="editForm.get('dataMod')!.invalid && (editForm.get('dataMod')!.dirty || editForm.get('dataMod')!.touched)">
<small class="form-text text-danger"
*ngIf="editForm.get('dataMod')?.errors?.required"> This
field is required. </small>
</div>
</div>
</div>
<div *ngIf="persOrario">
<button type="button" class="btn btn-secondary"
(click)="previousState()">
<fa-icon icon="ban"></fa-icon>
&nbsp;<span>Cancel</span>
</button>
<button type="submit" [disabled]="editForm.invalid || isSaving"
class="btn btn-primary">
<fa-icon icon="save"></fa-icon>
&nbsp;<span>Save</span>
</button>
</div>
</form>
</div>
</div>

View File

@ -0,0 +1,119 @@
import { Component, OnInit } from '@angular/core';
import { FormBuilder, Validators } from '@angular/forms';
import { ActivatedRoute } from '@angular/router';
import { PersOrario } from './persorario.model';
import { PersOrarioService } from './persorario.service';
@Component({
selector: 'jhi-persorario-update',
templateUrl: './persorario-update.component.html',
})
export class PersOrarioUpdateComponent implements OnInit {
persOrario!: PersOrario;
isSaving = false;
editForm = this.fb.group({
id: [],
idPersona: ['', [Validators.required]],
cf: ['', [Validators.required]],
dal: ['', [Validators.required]],
al: [''],
descrizione: ['', [Validators.required]],
lun: [''],
mar: [''],
mer: [''],
gio: [''],
ven: [''],
sab: [''],
percentuale: [''],
turno: [''],
oreTurno: [''],
festivo: [''],
notturno: [''],
dataMod: ['', [Validators.required]],
});
constructor(private persOrarioService: PersOrarioService, private route: ActivatedRoute, private fb: FormBuilder) {}
ngOnInit(): void {
this.route.data.subscribe(({ persOrario }) => {
if (persOrario) {
this.persOrario = persOrario;
this.updateForm(persOrario);
}
});
}
previousState(): void {
window.history.back();
}
save(): void {
this.isSaving = true;
this.updatePersOrario(this.persOrario);
if (this.persOrario.id !== undefined) {
this.persOrarioService.update(this.persOrario).subscribe(
() => this.onSaveSuccess(),
() => this.onSaveError()
);
} else {
this.persOrarioService.create(this.persOrario).subscribe(
() => this.onSaveSuccess(),
() => this.onSaveError()
);
}
}
private updateForm(persOrario: PersOrario): void {
this.editForm.patchValue({
id: persOrario.id,
idPersona: persOrario.idPersona,
cf: persOrario.cf,
dal: persOrario.dal,
al: persOrario.al,
descrizione: persOrario.descrizione,
lun: persOrario.lun,
mar: persOrario.mar,
mer: persOrario.mer,
gio: persOrario.gio,
ven: persOrario.ven,
sab: persOrario.sab,
percentuale: persOrario.percentuale,
turno: persOrario.turno,
oreTurno: persOrario.oreTurno,
festivo: persOrario.festivo,
notturno: persOrario.notturno,
dataMod: persOrario.dataMod,
});
}
private updatePersOrario(persOrario: PersOrario): void {
persOrario.idPersona = this.editForm.get(['idPersona'])!.value;
persOrario.cf = this.editForm.get(['cf'])!.value;
persOrario.dal = this.editForm.get(['dal'])!.value;
persOrario.al = this.editForm.get(['al'])!.value;
persOrario.descrizione = this.editForm.get(['descrizione'])!.value;
persOrario.lun = this.editForm.get(['lun'])!.value;
persOrario.mar = this.editForm.get(['mar'])!.value;
persOrario.mer = this.editForm.get(['mer'])!.value;
persOrario.gio = this.editForm.get(['gio'])!.value;
persOrario.ven = this.editForm.get(['ven'])!.value;
persOrario.sab = this.editForm.get(['sab'])!.value;
persOrario.percentuale = this.editForm.get(['percentuale'])!.value;
persOrario.turno = this.editForm.get(['turno'])!.value;
persOrario.oreTurno = this.editForm.get(['oreTurno'])!.value;
persOrario.festivo = this.editForm.get(['festivo'])!.value;
persOrario.notturno = this.editForm.get(['notturno'])!.value;
persOrario.dataMod = this.editForm.get(['dataMod'])!.value;
}
private onSaveSuccess(): void {
this.isSaving = false;
this.previousState();
}
private onSaveError(): void {
this.isSaving = false;
}
}

View File

@ -0,0 +1,79 @@
<div>
<h2>
<span id="persorario-page-heading">Personale Orario</span>
<button class="btn btn-primary float-right jh-create-entity"
[routerLink]="['./new']">
<fa-icon icon="plus"></fa-icon>
<span>Create a new Personale Orario</span>
</button>
</h2>
<jhi-alert-error></jhi-alert-error>
<jhi-alert></jhi-alert>
<div class="table-responsive" *ngIf="persOrarioArray">
<table class="table table-striped"
aria-describedby="user-management-page-heading">
<thead>
<tr jhiSort [(predicate)]="predicate" [(ascending)]="ascending"
[callback]="transition.bind(this)">
<th scope="col" jhiSortBy="id"><span>Id</span> <fa-icon
icon="sort"></fa-icon></th>
<th scope="col"><span>Id Persona</span></th>
<th scope="col"><span>Codice Fiscale</span></th>
<th scope="col"><span>Dal</span></th>
<th scope="col"><span>Al</span></th>
<th scope="col"><span>Descrizione</span></th>
<th scope="col"><span>Data Mod</span></th>
<th scope="col"></th>
</tr>
</thead>
<tbody *ngIf="persOrarioArray">
<tr *ngFor="let persOrario of persOrarioArray; trackBy: trackIdentity">
<td><a [routerLink]="['./', persOrario.id, 'view']">{{ persOrario.id }}</a></td>
<td>{{ persOrario.idPersona }}</td>
<td>{{ persOrario.cf }}</td>
<td>{{ persOrario.dal }}</td>
<td>{{ persOrario.al }}</td>
<td>{{ persOrario.descrizione }}</td>
<td>{{ persOrario.dataMod }}</td>
<td class="text-right">
<div class="btn-group">
<button type="submit" [routerLink]="['./', persOrario.id, 'view']"
class="btn btn-info btn-sm">
<fa-icon icon="eye"></fa-icon>
<span class="d-none d-md-inline">View</span>
</button>
<button type="submit" [routerLink]="['./', persOrario.id, 'edit']"
queryParamsHandling="merge" class="btn btn-primary btn-sm">
<fa-icon icon="pencil-alt"></fa-icon>
<span class="d-none d-md-inline">Edit</span>
</button>
<button type="button" (click)="deletePersOrario(persOrario)"
class="btn btn-danger btn-sm">
<fa-icon icon="times"></fa-icon>
<span class="d-none d-md-inline">Delete</span>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div *ngIf="persOrarioArray">
<div class="row justify-content-center">
<jhi-item-count [page]="page" [total]="totalItems"
[itemsPerPage]="itemsPerPage"></jhi-item-count>
</div>
<div class="row justify-content-center">
<ngb-pagination [collectionSize]="totalItems" [(page)]="page"
[pageSize]="itemsPerPage" [maxSize]="5" [rotate]="true"
[boundaryLinks]="true" (pageChange)="transition()"></ngb-pagination>
</div>
</div>
</div>

View File

@ -0,0 +1,97 @@
import { Component, OnInit, OnDestroy } from '@angular/core';
import { HttpResponse, HttpHeaders } from '@angular/common/http';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { Subscription, combineLatest } from 'rxjs';
import { ActivatedRoute, ParamMap, Router, Data } from '@angular/router';
import { JhiEventManager } from 'ng-jhipster';
import { ITEMS_PER_PAGE } from 'app/shared/constants/pagination.constants';
import { PersOrarioService } from './persorario.service';
import { PersOrario } from './persorario.model';
import { PersOrarioDeleteDialogComponent } from './persorario-delete-dialog.component';
@Component({
selector: 'jhi-persorario',
templateUrl: './persorario.component.html',
})
export class PersOrarioComponent implements OnInit, OnDestroy {
persOrarioArray: PersOrario[] | null = null;
persOrarioListSubscription?: Subscription;
totalItems = 0;
itemsPerPage = ITEMS_PER_PAGE;
page!: number;
predicate!: string;
ascending!: boolean;
constructor(
private persOrarioService: PersOrarioService,
private activatedRoute: ActivatedRoute,
private router: Router,
private eventManager: JhiEventManager,
private modalService: NgbModal
) {}
ngOnInit(): void {
this.persOrarioListSubscription = this.eventManager.subscribe('persOrarioListModification', () => this.loadAll());
this.handleNavigation();
}
ngOnDestroy(): void {
if (this.persOrarioListSubscription) {
this.eventManager.destroy(this.persOrarioListSubscription);
}
}
trackIdentity(index: number, item: PersOrario): any {
return item.id;
}
deletePersOrario(persOrario: PersOrario): void {
const modalRef = this.modalService.open(PersOrarioDeleteDialogComponent, { size: 'lg', backdrop: 'static' });
modalRef.componentInstance.persOrario = persOrario;
}
transition(): void {
this.router.navigate(['./'], {
relativeTo: this.activatedRoute.parent,
queryParams: {
page: this.page,
sort: this.predicate + ',' + (this.ascending ? 'asc' : 'desc'),
},
});
}
private handleNavigation(): void {
combineLatest(this.activatedRoute.data, this.activatedRoute.queryParamMap, (data: Data, params: ParamMap) => {
const page = params.get('page');
this.page = page !== null ? +page : 1;
const sort = (params.get('sort') ?? data['defaultSort']).split(',');
this.predicate = sort[0];
this.ascending = sort[1] === 'asc';
this.loadAll();
}).subscribe();
}
private loadAll(): void {
this.persOrarioService
.query({
page: this.page - 1,
size: this.itemsPerPage,
sort: this.sort(),
})
.subscribe((res: HttpResponse<PersOrario[]>) => this.onSuccess(res.body, res.headers));
}
private sort(): string[] {
const result = [this.predicate + ',' + (this.ascending ? 'asc' : 'desc')];
if (this.predicate !== 'id') {
result.push('id');
}
return result;
}
private onSuccess(persOrarioArray: PersOrario[] | null, headers: HttpHeaders): void {
this.totalItems = Number(headers.get('X-Total-Count'));
this.persOrarioArray = persOrarioArray;
}
}

View File

@ -0,0 +1,43 @@
export interface IPersOrario {
id?: any;
idPersona?: any;
cf?: string;
dal?: any;
al?: any;
descrizione?: string;
lun?: any;
mar?: any;
mer?: any;
gio?: any;
ven?: any;
sab?: any;
percentuale?: any;
turno?: string;
oreTurno?: any;
festivo?: string;
notturno?: string;
dataMod?: any;
}
export class PersOrario implements IPersOrario {
constructor(
public id?: any,
public idPersona?: any,
public cf?: string,
public dal?: any,
public al?: any,
public descrizione?: string,
public lun?: any,
public mar?: any,
public mer?: any,
public gio?: any,
public ven?: any,
public sab?: any,
public percentuale?: any,
public turno?: string,
public oreTurno?: any,
public festivo?: string,
public notturno?: string,
public dataMod?: any
) {}
}

View File

@ -0,0 +1,16 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { EpasmedSharedModule } from 'app/shared/shared.module';
import { PersOrarioComponent } from './persorario.component';
import { PersOrarioDetailComponent } from './persorario-detail.component';
import { PersOrarioUpdateComponent } from './persorario-update.component';
import { PersOrarioDeleteDialogComponent } from './persorario-delete-dialog.component';
import { persOrarioRoute } from './persorario.route';
@NgModule({
imports: [EpasmedSharedModule, RouterModule.forChild(persOrarioRoute)],
declarations: [PersOrarioComponent, PersOrarioDetailComponent, PersOrarioUpdateComponent, PersOrarioDeleteDialogComponent],
entryComponents: [PersOrarioComponent],
})
export class PersOrarioModule {}

View File

@ -0,0 +1,53 @@
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot, Routes } from '@angular/router';
import { Observable, of } from 'rxjs';
import { PersOrario, IPersOrario } from './persorario.model';
import { PersOrarioService } from './persorario.service';
import { PersOrarioComponent } from './persorario.component';
import { PersOrarioDetailComponent } from './persorario-detail.component';
import { PersOrarioUpdateComponent } from './persorario-update.component';
@Injectable({ providedIn: 'root' })
export class PersOrarioResolve implements Resolve<IPersOrario> {
constructor(private service: PersOrarioService) {}
resolve(route: ActivatedRouteSnapshot): Observable<IPersOrario> {
const id = route.params['id'];
if (id) {
return this.service.find(id);
}
return of(new PersOrario());
}
}
export const persOrarioRoute: Routes = [
{
path: '',
component: PersOrarioComponent,
data: {
defaultSort: 'id,asc',
},
},
{
path: ':id/view',
component: PersOrarioDetailComponent,
resolve: {
persOrario: PersOrarioResolve,
},
},
{
path: 'new',
component: PersOrarioUpdateComponent,
resolve: {
persOrario: PersOrarioResolve,
},
},
{
path: ':id/edit',
component: PersOrarioUpdateComponent,
resolve: {
persOrario: PersOrarioResolve,
},
},
];

View File

@ -0,0 +1,35 @@
import { Injectable } from '@angular/core';
import { HttpClient, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import { SERVER_API_URL } from 'app/app.constants';
import { createRequestOption, Pagination } from 'app/shared/util/request-util';
import { IPersOrario } from './persorario.model';
@Injectable({ providedIn: 'root' })
export class PersOrarioService {
public resourceUrl = SERVER_API_URL + 'api/persorario';
constructor(private http: HttpClient) {}
query(req?: Pagination): Observable<HttpResponse<IPersOrario[]>> {
const options = createRequestOption(req);
return this.http.get<IPersOrario[]>(this.resourceUrl, { params: options, observe: 'response' });
}
create(persOrario: IPersOrario): Observable<IPersOrario> {
return this.http.post<IPersOrario>(this.resourceUrl, persOrario);
}
update(persOrario: IPersOrario): Observable<IPersOrario> {
return this.http.put<IPersOrario>(this.resourceUrl, persOrario);
}
find(id: string): Observable<IPersOrario> {
return this.http.get<IPersOrario>(`${this.resourceUrl}/${id}`);
}
delete(id: string): Observable<{}> {
return this.http.delete(`${this.resourceUrl}/${id}`);
}
}

View File

@ -33,16 +33,25 @@
<fa-icon icon="user" [fixedWidth]="true"></fa-icon>
<span>Tabs SI</span>
</a>
</li>
<li>
<a class="dropdown-item" routerLink="entities/timecardsreporting" routerLinkActive="active" (click)="collapseNavbar()">
<fa-icon icon="user" [fixedWidth]="true"></fa-icon>
<span>TimeCards Reporting</span>
<span>Cartellini Rendicontazioni</span>
</a>
</li>
<li>
<a class="dropdown-item" routerLink="entities/leaves" routerLinkActive="active" (click)="collapseNavbar()">
<fa-icon icon="user" [fixedWidth]="true"></fa-icon>
<span>Leaves</span>
<span>Aspettative</span>
</a>
</li>
<li>
<a class="dropdown-item" routerLink="entities/persorario" routerLinkActive="active" (click)="collapseNavbar()">
<fa-icon icon="user" [fixedWidth]="true"></fa-icon>
<span>Pers Orario</span>
</a>
</li>
</ul>
</li>
<li *ngSwitchCase="true" ngbDropdown class="nav-item dropdown pointer" display="dynamic" routerLinkActive="active" [routerLinkActiveOptions]="{ exact: true }">
@ -65,7 +74,7 @@
<span>Rendicontazione Singolo Cart.</span>
</a>
</li>
<li>
<li *jhiHasAnyAuthority="'ROLE_ADMIN'">
<a class="dropdown-item" routerLink="operations/sync" routerLinkActive="active" (click)="collapseNavbar()">
<fa-icon icon="cloud" [fixedWidth]="true"></fa-icon>
<span>Sync</span>

View File

@ -36,7 +36,6 @@ public class SyncResourceIT {
private static final Logger logger = LoggerFactory.getLogger(SyncResourceIT.class);
private final Logger log = LoggerFactory.getLogger(getClass());
private static final String YEAR = "2022";
private static final String MONTH = "9";
@ -111,24 +110,37 @@ public class SyncResourceIT {
DateTimeFormatter formatter = new DateTimeFormatterBuilder().parseCaseInsensitive()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME).optionalStart().appendPattern(".SSSSSS").optionalEnd()
.optionalStart().appendZoneOrOffsetId().optionalEnd().toFormatter();
//DateTimeFormatter formatterDataMod = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
Timestamp dataMod;
// DateTimeFormatter formatterDataMod = DateTimeFormatter.ofPattern("yyyy-MM-dd
// HH:mm:ss");
Timestamp dataMod;
try {
LocalDateTime dMod = LocalDateTime.parse("2021-02-03T19:49:05.231072", formatter);
dMod=dMod.truncatedTo(ChronoUnit.SECONDS);
//dMod= LocalDateTime.parse(dMod.format(formatterDataMod));
//dataMod = Timestamp.valueOf(dMod.format(formatterDataMod));
dMod = dMod.truncatedTo(ChronoUnit.SECONDS);
// dMod= LocalDateTime.parse(dMod.format(formatterDataMod));
// dataMod = Timestamp.valueOf(dMod.format(formatterDataMod));
dataMod = Timestamp.valueOf(dMod);
} catch (IllegalArgumentException | DateTimeParseException e) {
logger.error("Invalid stamping data format: {}", e.getLocalizedMessage(), e);
return;
}
logger.info("Result: {}", dataMod);
}
@Test
public void testLocalData() throws Exception {
LocalDateTime data = LocalDateTime.now();
logger.info("Data: {}", data);
logger.info("Year: {}", data.getYear());
logger.info("Month: {}", data.getMonth());
logger.info("Month Value: {}", data.getMonthValue());
logger.info("Result: {}",dataMod);
}
}