SKE-54 create competition component
This commit is contained in:
parent
b75d8893c6
commit
d9ab9802cd
@ -10,6 +10,7 @@ import { RolesComponent } from 'app/roles/roles.component';
|
|||||||
import { CategoriesListComponent } from '@app/categories-list/categories-list.component';
|
import { CategoriesListComponent } from '@app/categories-list/categories-list.component';
|
||||||
import { CompetitionsListComponent } from '@app/competitions-list/competitions-list.component';
|
import { CompetitionsListComponent } from '@app/competitions-list/competitions-list.component';
|
||||||
import { CompetitionDetailComponent } from '@app/competition-detail/competition-detail.component';
|
import { CompetitionDetailComponent } from '@app/competition-detail/competition-detail.component';
|
||||||
|
import { CompetitionCreateComponent } from '@app/competition-create/competition-create.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
@ -25,7 +26,8 @@ import { CompetitionDetailComponent } from '@app/competition-detail/competition-
|
|||||||
{ path: 'about', component: AboutComponent },
|
{ path: 'about', component: AboutComponent },
|
||||||
{ path: 'categories-list', component: CategoriesListComponent, canActivate: [AppRouteGuard] },
|
{ path: 'categories-list', component: CategoriesListComponent, canActivate: [AppRouteGuard] },
|
||||||
{ path: 'categories-list/:id', component: CompetitionsListComponent, canActivate: [AppRouteGuard] },
|
{ path: 'categories-list/:id', component: CompetitionsListComponent, canActivate: [AppRouteGuard] },
|
||||||
{ path: 'competitions/:id', component: CompetitionDetailComponent, canActivate: [AppRouteGuard] }
|
{ path: 'categories-list/:id/competitions/:id', component: CompetitionDetailComponent, canActivate: [AppRouteGuard] },
|
||||||
|
{ path: 'competition-create', component: CompetitionCreateComponent, data: { permission: 'Pages.Create.Competition' }, canActivate: [AppRouteGuard] },
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
@ -35,13 +35,18 @@ import { RightSideBarComponent } from '@app/layout/right-sidebar.component';
|
|||||||
import { CategoriesListComponent } from '@app/categories-list/categories-list.component';
|
import { CategoriesListComponent } from '@app/categories-list/categories-list.component';
|
||||||
import { CompetitionsListComponent } from '@app/competitions-list/competitions-list.component';
|
import { CompetitionsListComponent } from '@app/competitions-list/competitions-list.component';
|
||||||
import { CompetitionDetailComponent } from '@app/competition-detail/competition-detail.component';
|
import { CompetitionDetailComponent } from '@app/competition-detail/competition-detail.component';
|
||||||
|
import { CompetitionCreateComponent } from '@app/competition-create/competition-create.component';
|
||||||
|
|
||||||
import { FilterClassesPipe } from '@app/pipe/filter-classes.pipe';
|
import { FilterClassesPipe } from '@app/pipe/filter-classes.pipe';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
MatSelectModule,
|
MatSelectModule,
|
||||||
MatOptionModule,
|
MatOptionModule,
|
||||||
MatFormFieldModule
|
MatFormFieldModule,
|
||||||
|
MatDatepickerModule,
|
||||||
|
MatNativeDateModule,
|
||||||
|
MatInputModule,
|
||||||
|
MatIconModule
|
||||||
} from '@angular/material';
|
} from '@angular/material';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
@ -67,6 +72,7 @@ import {
|
|||||||
CategoriesListComponent,
|
CategoriesListComponent,
|
||||||
CompetitionsListComponent,
|
CompetitionsListComponent,
|
||||||
CompetitionDetailComponent,
|
CompetitionDetailComponent,
|
||||||
|
CompetitionCreateComponent,
|
||||||
FilterClassesPipe
|
FilterClassesPipe
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -84,6 +90,10 @@ import {
|
|||||||
MatSelectModule,
|
MatSelectModule,
|
||||||
MatOptionModule,
|
MatOptionModule,
|
||||||
MatFormFieldModule,
|
MatFormFieldModule,
|
||||||
|
MatDatepickerModule,
|
||||||
|
MatNativeDateModule,
|
||||||
|
MatInputModule,
|
||||||
|
MatIconModule
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
|
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
#create-competition-area {
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
color: cornflowerblue;
|
||||||
|
text-shadow: 1px 1px 1px #ab93ab;
|
||||||
|
}
|
||||||
|
|
||||||
|
.element-size {
|
||||||
|
width: 500px;
|
||||||
|
}
|
@ -0,0 +1,183 @@
|
|||||||
|
<div id="create-competition-area">
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<h2 class="title">Tworzenie konkursu</h2>
|
||||||
|
|
||||||
|
<form (ngSubmit)="saveCompetition()"
|
||||||
|
#createCompetitionForm="ngForm">
|
||||||
|
<div class="col-sm-8 col-md-8">
|
||||||
|
<div class="form-group">
|
||||||
|
<mat-form-field class="element-size">
|
||||||
|
<input matInput
|
||||||
|
name="name"
|
||||||
|
#name="ngModel"
|
||||||
|
[(ngModel)]="createCompetition.name"
|
||||||
|
type="text"
|
||||||
|
placeholder="Nazwa konkursu"
|
||||||
|
required
|
||||||
|
maxlength="100">
|
||||||
|
<mat-error *ngIf="name.invalid && name.errors.required">
|
||||||
|
Nazwa jest wymagana.
|
||||||
|
</mat-error>
|
||||||
|
<mat-error *ngIf="name.invalid && name.errors.maxlength">
|
||||||
|
Przekroczono maksymalną długość nazwy, 100 znaków.
|
||||||
|
</mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-8 col-md-8">
|
||||||
|
<div class="form-group">
|
||||||
|
<mat-form-field class="element-size">
|
||||||
|
<mat-select placeholder="Kategorie"
|
||||||
|
[(ngModel)]="createCompetition.categoriesId"
|
||||||
|
name="categoriesId"
|
||||||
|
#categoriesId="ngModel"
|
||||||
|
multiple
|
||||||
|
required>
|
||||||
|
<mat-option *ngFor="let category of categoriesList" [value]="category.id">
|
||||||
|
{{category.name}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
<mat-error *ngIf="categoriesId.invalid && categoriesId.errors.required">
|
||||||
|
Kategoria jest wymagana.
|
||||||
|
</mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-8 col-md-8">
|
||||||
|
<div class="form-group">
|
||||||
|
<mat-form-field class="element-size">
|
||||||
|
<textarea matInput
|
||||||
|
matTextareaAutosize
|
||||||
|
matAutosizeMinRows="3"
|
||||||
|
matAutosizeMaxRows="6"
|
||||||
|
name="description"
|
||||||
|
#description="ngModel"
|
||||||
|
[(ngModel)]="createCompetition.description"
|
||||||
|
type="text"
|
||||||
|
placeholder="Opis"
|
||||||
|
required
|
||||||
|
maxlength="1000">
|
||||||
|
</textarea>
|
||||||
|
<mat-error *ngIf="description.invalid && description.errors.required">
|
||||||
|
Opis jest wymagany.
|
||||||
|
</mat-error>
|
||||||
|
<mat-error *ngIf="description.invalid && description.errors.maxlength">
|
||||||
|
Przekroczono maksymalną długość opisu, 1000 znaków.
|
||||||
|
</mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-8 col-md-8">
|
||||||
|
<div class="form-group">
|
||||||
|
<mat-form-field class="element-size">
|
||||||
|
<textarea matInput
|
||||||
|
matTextareaAutosize
|
||||||
|
matAutosizeMinRows="3"
|
||||||
|
matAutosizeMaxRows="6"
|
||||||
|
name="prize"
|
||||||
|
#prize="ngModel"
|
||||||
|
[(ngModel)]="createCompetition.prize"
|
||||||
|
type="text"
|
||||||
|
placeholder="Nagrody"
|
||||||
|
required
|
||||||
|
maxlength="1000">
|
||||||
|
</textarea>
|
||||||
|
<mat-error *ngIf="prize.invalid && prize.errors.required">
|
||||||
|
Opis nagród jest wymagany.
|
||||||
|
</mat-error>
|
||||||
|
<mat-error *ngIf="prize.invalid && prize.errors.maxlength">
|
||||||
|
Przekroczono maksymalną długość opisu nagród, 1000 znaków.
|
||||||
|
</mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-8 col-md-8">
|
||||||
|
<div class="form-group">
|
||||||
|
<mat-form-field class="element-size">
|
||||||
|
<mat-select placeholder="Minimalna klasa"
|
||||||
|
[(ngModel)]="createCompetition.minClass"
|
||||||
|
name="minClass"
|
||||||
|
#minClass="ngModel"
|
||||||
|
required>
|
||||||
|
<mat-option *ngFor="let possibleClass of possibleClasses" [value]="possibleClass.value">
|
||||||
|
{{possibleClass.viewValue}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
<mat-error *ngIf="minClass.invalid && minClass.errors.required">
|
||||||
|
Minimalna klasa jest wymagana.
|
||||||
|
</mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-8 col-md-8">
|
||||||
|
<div class="form-group">
|
||||||
|
<mat-form-field class="element-size">
|
||||||
|
<mat-select placeholder="Maksymalna klasa"
|
||||||
|
[(ngModel)]="createCompetition.maxClass"
|
||||||
|
name="maxClass"
|
||||||
|
#maxClass="ngModel"
|
||||||
|
required>
|
||||||
|
<mat-option *ngFor="let possibleClass of possibleClasses" [value]="possibleClass.value">
|
||||||
|
{{possibleClass.viewValue}}
|
||||||
|
</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
<mat-error *ngIf="maxClass.invalid && maxClass.errors.required">
|
||||||
|
Maksymalna klasa jest wymagana.
|
||||||
|
</mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-8 col-md-8">
|
||||||
|
<div class="form-group">
|
||||||
|
<mat-form-field class="element-size">
|
||||||
|
<input matInput
|
||||||
|
[matDatepicker]="picker"
|
||||||
|
placeholder="Wybierz datę rozpoczęcia"
|
||||||
|
[(ngModel)]="createCompetition.startDate"
|
||||||
|
name="startDate"
|
||||||
|
#startDate="ngModel"
|
||||||
|
disabled
|
||||||
|
min="{{ today | date: 'yyyy-MM-dd'}}"
|
||||||
|
max="{{ createCompetition.endDate | date: 'yyyy-MM-dd'}}">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker disabled="false"></mat-datepicker>
|
||||||
|
<mat-error *ngIf="startDate.invalid && startDate.errors">
|
||||||
|
Data rozpoczęcia konkursu jest nieprawidłowa.
|
||||||
|
</mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-8 col-md-8">
|
||||||
|
<div class="form-group">
|
||||||
|
<mat-form-field class="element-size">
|
||||||
|
<input matInput
|
||||||
|
[matDatepicker]="picker2"
|
||||||
|
placeholder="Wybierz datę zakończenia"
|
||||||
|
[(ngModel)]="createCompetition.endDate"
|
||||||
|
name="endDate"
|
||||||
|
#endDate="ngModel"
|
||||||
|
disabled
|
||||||
|
min="{{ createCompetition.startDate | date: 'yyyy-MM-dd'}}">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker2"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker2 disabled="false"></mat-datepicker>
|
||||||
|
<mat-error *ngIf="endDate.invalid && endDate.errors">
|
||||||
|
Data zakończenia konkursu jest nieprawidłowa.
|
||||||
|
</mat-error>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-8 col-md-8">
|
||||||
|
<button type="submit" style="margin-bottom: 20px" class="btn btn-success" [disabled]="!createCompetitionForm.form.valid">Utwórz</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,92 @@
|
|||||||
|
import { Component, OnInit, Injector, OnDestroy } from '@angular/core';
|
||||||
|
import { appModuleAnimation } from '@shared/animations/routerTransition';
|
||||||
|
import { CategoryServiceProxy, CategoryDto, CompetitionServiceProxy, CreateCompetitionDto } from '@shared/service-proxies/service-proxies';
|
||||||
|
import { List } from 'lodash';
|
||||||
|
import { AppComponentBase } from '@shared/app-component-base';
|
||||||
|
import { Subscription } from 'rxjs/Rx';
|
||||||
|
import { finalize } from 'rxjs/operators';
|
||||||
|
import { Router } from '@angular/router';
|
||||||
|
import * as moment from 'moment';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
templateUrl: './competition-create.component.html',
|
||||||
|
styleUrls: ['./competition-create.component.css'],
|
||||||
|
animations: [appModuleAnimation()]
|
||||||
|
})
|
||||||
|
export class CompetitionCreateComponent extends AppComponentBase implements OnInit, OnDestroy {
|
||||||
|
|
||||||
|
public categoriesList: List<CategoryDto> = [];
|
||||||
|
public createCompetitionAreaId: string = 'create-competition-area';
|
||||||
|
|
||||||
|
public createCompetition: CreateCompetitionDto = null;;
|
||||||
|
|
||||||
|
private categoryListSubscription: Subscription;
|
||||||
|
private createCompetitionSubscription: Subscription;
|
||||||
|
|
||||||
|
public today: Date = new Date();
|
||||||
|
|
||||||
|
public possibleClasses = [
|
||||||
|
{value: 1, viewValue: 'Klasa 1'},
|
||||||
|
{value: 2, viewValue: 'Klasa 2'},
|
||||||
|
{value: 3, viewValue: 'Klasa 3'},
|
||||||
|
{value: 4, viewValue: 'Klasa 4'},
|
||||||
|
{value: 5, viewValue: 'Klasa 5'},
|
||||||
|
{value: 6, viewValue: 'Klasa 6'},
|
||||||
|
{value: 7, viewValue: 'Klasa 7'},
|
||||||
|
{value: 8, viewValue: 'Klasa 8'}
|
||||||
|
];
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
injector: Injector,
|
||||||
|
private _categoryService: CategoryServiceProxy,
|
||||||
|
private _competitionService: CompetitionServiceProxy,
|
||||||
|
private router: Router
|
||||||
|
) {
|
||||||
|
super(injector);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ngOnInit() {
|
||||||
|
this.createCompetition = new CreateCompetitionDto();
|
||||||
|
this.getCompetitionCategories();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ngOnDestroy() {
|
||||||
|
if (this.categoryListSubscription) {
|
||||||
|
this.categoryListSubscription.unsubscribe();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.createCompetitionSubscription) {
|
||||||
|
this.createCompetitionSubscription.unsubscribe();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private getCompetitionCategories(): void {
|
||||||
|
this.setBusy(this.createCompetitionAreaId);
|
||||||
|
|
||||||
|
this.categoryListSubscription = this._categoryService.getAllCategories()
|
||||||
|
.pipe(finalize(() => { this.clearBusy(this.createCompetitionAreaId); }))
|
||||||
|
.subscribe((result: List<CategoryDto>) => {
|
||||||
|
this.categoriesList = result;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public saveCompetition(): void {
|
||||||
|
console.log('Save competition');
|
||||||
|
console.log(this.createCompetition);
|
||||||
|
|
||||||
|
this.createCompetition.startDate = moment(this.createCompetition.startDate, 'YYYY-MM-DD');
|
||||||
|
this.createCompetition.endDate = moment(this.createCompetition.endDate, 'YYYY-MM-DD');
|
||||||
|
|
||||||
|
this.createCompetitionSubscription = this._competitionService.createCompetition(this.createCompetition)
|
||||||
|
.subscribe((result: number) => {
|
||||||
|
this.goToCategoriesList();
|
||||||
|
this.notify.success(this.l('Zapisano pomyślnie'));
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public goToCategoriesList(): void {
|
||||||
|
const route: string = `app/categories-list`;
|
||||||
|
this.router.navigate([route]);
|
||||||
|
}
|
||||||
|
}
|
@ -72,9 +72,9 @@ export class CompetitionsListComponent extends AppComponentBase implements OnIni
|
|||||||
}
|
}
|
||||||
|
|
||||||
public goToDetail(competition: CompetitionDto): void {
|
public goToDetail(competition: CompetitionDto): void {
|
||||||
//console.log(this.router.url);
|
console.log(this.router.url);
|
||||||
//const route: string = this.router.url + `/${competition.id}`;
|
const route: string = this.router.url + `/competitions/${competition.id}`;
|
||||||
const route: string = `app/competitions/${competition.id}`;
|
//const route: string = `app/competitions/${competition.id}`;
|
||||||
this.router.navigate([route]);
|
this.router.navigate([route]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ export class SideBarNavComponent extends AppComponentBase {
|
|||||||
new MenuItem(this.l("Strona domowa"), "", "home", "/app/home"),
|
new MenuItem(this.l("Strona domowa"), "", "home", "/app/home"),
|
||||||
|
|
||||||
new MenuItem(this.l("Konkursy"), "", "list", "/app/categories-list"),
|
new MenuItem(this.l("Konkursy"), "", "list", "/app/categories-list"),
|
||||||
|
new MenuItem(this.l("Dodaj konkurs"), "Pages.Create.Competition", "add", "/app/competition-create"),
|
||||||
|
|
||||||
new MenuItem(this.l("Tenants"), "Pages.Tenants", "business", "/app/tenants"),
|
new MenuItem(this.l("Tenants"), "Pages.Tenants", "business", "/app/tenants"),
|
||||||
new MenuItem(this.l("Użytkownicy"), "Pages.Users", "people", "/app/users"),
|
new MenuItem(this.l("Użytkownicy"), "Pages.Users", "people", "/app/users"),
|
||||||
|
@ -207,6 +207,74 @@ export class CategoryServiceProxy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class CompetitionServiceProxy {
|
||||||
|
private http: HttpClient;
|
||||||
|
private baseUrl: string;
|
||||||
|
protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;
|
||||||
|
|
||||||
|
constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {
|
||||||
|
this.http = http;
|
||||||
|
this.baseUrl = baseUrl ? baseUrl : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @createCompetitionDto (optional)
|
||||||
|
* @return Success
|
||||||
|
*/
|
||||||
|
createCompetition(createCompetitionDto: CreateCompetitionDto | null | undefined): Observable<number> {
|
||||||
|
let url_ = this.baseUrl + "/api/services/app/Competition/CreateCompetition";
|
||||||
|
url_ = url_.replace(/[?&]$/, "");
|
||||||
|
|
||||||
|
const content_ = JSON.stringify(createCompetitionDto);
|
||||||
|
|
||||||
|
let options_ : any = {
|
||||||
|
body: content_,
|
||||||
|
observe: "response",
|
||||||
|
responseType: "blob",
|
||||||
|
headers: new HttpHeaders({
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"Accept": "application/json"
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
return this.http.request("post", url_, options_).pipe(_observableMergeMap((response_ : any) => {
|
||||||
|
return this.processCreateCompetition(response_);
|
||||||
|
})).pipe(_observableCatch((response_: any) => {
|
||||||
|
if (response_ instanceof HttpResponseBase) {
|
||||||
|
try {
|
||||||
|
return this.processCreateCompetition(<any>response_);
|
||||||
|
} catch (e) {
|
||||||
|
return <Observable<number>><any>_observableThrow(e);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
return <Observable<number>><any>_observableThrow(response_);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected processCreateCompetition(response: HttpResponseBase): Observable<number> {
|
||||||
|
const status = response.status;
|
||||||
|
const responseBlob =
|
||||||
|
response instanceof HttpResponse ? response.body :
|
||||||
|
(<any>response).error instanceof Blob ? (<any>response).error : undefined;
|
||||||
|
|
||||||
|
let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }};
|
||||||
|
if (status === 200) {
|
||||||
|
return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
|
||||||
|
let result200: any = null;
|
||||||
|
let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
|
||||||
|
result200 = resultData200 !== undefined ? resultData200 : <any>null;
|
||||||
|
return _observableOf(result200);
|
||||||
|
}));
|
||||||
|
} else if (status !== 200 && status !== 204) {
|
||||||
|
return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
|
||||||
|
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
return _observableOf<number>(<any>null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class CompetitionCategoryServiceProxy {
|
export class CompetitionCategoryServiceProxy {
|
||||||
private http: HttpClient;
|
private http: HttpClient;
|
||||||
@ -1959,6 +2027,85 @@ export interface ICategoryDto {
|
|||||||
id: number | undefined;
|
id: number | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class CreateCompetitionDto implements ICreateCompetitionDto {
|
||||||
|
name: string | undefined;
|
||||||
|
startDate: moment.Moment | undefined;
|
||||||
|
endDate: moment.Moment | undefined;
|
||||||
|
description: string | undefined;
|
||||||
|
prize: string | undefined;
|
||||||
|
minClass: number | undefined;
|
||||||
|
maxClass: number | undefined;
|
||||||
|
categoriesId: number[] | undefined;
|
||||||
|
|
||||||
|
constructor(data?: ICreateCompetitionDto) {
|
||||||
|
if (data) {
|
||||||
|
for (var property in data) {
|
||||||
|
if (data.hasOwnProperty(property))
|
||||||
|
(<any>this)[property] = (<any>data)[property];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
init(data?: any) {
|
||||||
|
if (data) {
|
||||||
|
this.name = data["name"];
|
||||||
|
this.startDate = data["startDate"] ? moment(data["startDate"].toString()) : <any>undefined;
|
||||||
|
this.endDate = data["endDate"] ? moment(data["endDate"].toString()) : <any>undefined;
|
||||||
|
this.description = data["description"];
|
||||||
|
this.prize = data["prize"];
|
||||||
|
this.minClass = data["minClass"];
|
||||||
|
this.maxClass = data["maxClass"];
|
||||||
|
if (data["categoriesId"] && data["categoriesId"].constructor === Array) {
|
||||||
|
this.categoriesId = [];
|
||||||
|
for (let item of data["categoriesId"])
|
||||||
|
this.categoriesId.push(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static fromJS(data: any): CreateCompetitionDto {
|
||||||
|
data = typeof data === 'object' ? data : {};
|
||||||
|
let result = new CreateCompetitionDto();
|
||||||
|
result.init(data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
toJSON(data?: any) {
|
||||||
|
data = typeof data === 'object' ? data : {};
|
||||||
|
data["name"] = this.name;
|
||||||
|
data["startDate"] = this.startDate ? this.startDate.toISOString() : <any>undefined;
|
||||||
|
data["endDate"] = this.endDate ? this.endDate.toISOString() : <any>undefined;
|
||||||
|
data["description"] = this.description;
|
||||||
|
data["prize"] = this.prize;
|
||||||
|
data["minClass"] = this.minClass;
|
||||||
|
data["maxClass"] = this.maxClass;
|
||||||
|
if (this.categoriesId && this.categoriesId.constructor === Array) {
|
||||||
|
data["categoriesId"] = [];
|
||||||
|
for (let item of this.categoriesId)
|
||||||
|
data["categoriesId"].push(item);
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
clone(): CreateCompetitionDto {
|
||||||
|
const json = this.toJSON();
|
||||||
|
let result = new CreateCompetitionDto();
|
||||||
|
result.init(json);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ICreateCompetitionDto {
|
||||||
|
name: string | undefined;
|
||||||
|
startDate: moment.Moment | undefined;
|
||||||
|
endDate: moment.Moment | undefined;
|
||||||
|
description: string | undefined;
|
||||||
|
prize: string | undefined;
|
||||||
|
minClass: number | undefined;
|
||||||
|
maxClass: number | undefined;
|
||||||
|
categoriesId: number[] | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
export class CompetitionDto implements ICompetitionDto {
|
export class CompetitionDto implements ICompetitionDto {
|
||||||
name: string | undefined;
|
name: string | undefined;
|
||||||
startDate: moment.Moment | undefined;
|
startDate: moment.Moment | undefined;
|
||||||
|
@ -15,6 +15,7 @@ import * as ApiServiceProxies from './service-proxies';
|
|||||||
ApiServiceProxies.ConfigurationServiceProxy,
|
ApiServiceProxies.ConfigurationServiceProxy,
|
||||||
ApiServiceProxies.CategoryServiceProxy,
|
ApiServiceProxies.CategoryServiceProxy,
|
||||||
ApiServiceProxies.CompetitionCategoryServiceProxy,
|
ApiServiceProxies.CompetitionCategoryServiceProxy,
|
||||||
|
ApiServiceProxies.CompetitionServiceProxy,
|
||||||
{ provide: HTTP_INTERCEPTORS, useClass: AbpHttpInterceptor, multi: true }
|
{ provide: HTTP_INTERCEPTORS, useClass: AbpHttpInterceptor, multi: true }
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
@ -27,6 +27,8 @@ namespace SystemKonkursow.Competition.CompetitionCategory
|
|||||||
var mappedCompetition = ObjectMapper.Map<Domain.Competition>(createCompetitionDto);
|
var mappedCompetition = ObjectMapper.Map<Domain.Competition>(createCompetitionDto);
|
||||||
|
|
||||||
mappedCompetition.CreatorUserId = user.Id;
|
mappedCompetition.CreatorUserId = user.Id;
|
||||||
|
mappedCompetition.StartDate = DateHelper.GetLocalTime(createCompetitionDto.StartDate);
|
||||||
|
mappedCompetition.EndDate = DateHelper.GetLocalTime(createCompetitionDto.EndDate);
|
||||||
|
|
||||||
var newCompetitionId = await _competitionRepository.InsertAndGetIdAsync(mappedCompetition);
|
var newCompetitionId = await _competitionRepository.InsertAndGetIdAsync(mappedCompetition);
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ namespace SystemKonkursow.Competition.CompetitionCategory.Dto
|
|||||||
public CompetitionCategoryMapProfile()
|
public CompetitionCategoryMapProfile()
|
||||||
{
|
{
|
||||||
CreateMap<Domain.CompetitionCategory, CompetitionDto>()
|
CreateMap<Domain.CompetitionCategory, CompetitionDto>()
|
||||||
|
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.CompetitionId))
|
||||||
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Competition.Name))
|
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Competition.Name))
|
||||||
.ForMember(dest => dest.StartDate, opt => opt.MapFrom(src => src.Competition.StartDate))
|
.ForMember(dest => dest.StartDate, opt => opt.MapFrom(src => src.Competition.StartDate))
|
||||||
.ForMember(dest => dest.EndDate, opt => opt.MapFrom(src => src.Competition.EndDate))
|
.ForMember(dest => dest.EndDate, opt => opt.MapFrom(src => src.Competition.EndDate))
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace SystemKonkursow
|
||||||
|
{
|
||||||
|
public static class DateHelper
|
||||||
|
{
|
||||||
|
public static DateTime GetLocalTime(DateTime dateTime)
|
||||||
|
{
|
||||||
|
TimeZoneInfo timeZone = TimeZoneInfo.Local;
|
||||||
|
return TimeZoneInfo.ConvertTime(dateTime, timeZone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user