package controllers;
import api.v1.*;
import auth.modules.TokenAuthorize;
import auth.types.PermissionType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import compositions.*;
import mapper.ForecastMapper;
import mapper.ForecastSearchResultMapper;
import models.ForecastModel;
import models.ForecastSearchResult;
import models.OrderModel;
import org.joda.time.DateTime;
import play.libs.Json;
import play.mvc.Result;
import service.OrderService;
import service.ForecastService;
import service.PoseidonService;
import java.io.IOException;
import java.util.Date;
import java.util.List;
@ResponseTimeLoggingComposition.ResponseTimeLogging
@NoCacheComposition.NoCache
@ErrorHandlingComposition.ErrorHandling
@RequestLoggingComposition.RequestLogging
@CorsComposition.Cors
public class ForecastControllerV1 extends PoseidonController {
@TokenAuthorize(requiredPermission = PermissionType.READ)
public Result getWorklistByDateTermin(Long date, Integer termin) {
OrderService service = new OrderService(currentApiUser().username);
ForecastService forecastService = new ForecastService(currentApiUser().username);
DateTime dato = new DateTime(date, PoseidonService.getTimeZone());
List<OrderModel> orderModels = service.getByDateTermin(dato, termin);
List<WorklistItem> items = forecastService.getWorklistItems(dato,termin,orderModels);
return ok(Json.toJson(items));
}
@TokenAuthorize(requiredPermission = PermissionType.WRITE)
public Result produceAndSend(String callback) {
ForecastService forecastService = new ForecastService(currentApiUser().username);
JsonNode body = request().body().asJson();
ObjectMapper mapper = new ObjectMapper();
OrderForecast apiOrderForecast;
try {
apiOrderForecast = mapper.readValue(body.toString(),OrderForecast.class);
} catch (IOException e) {
return badRequest("json post parameter parsing failure: " + e.getMessage());
}
List<ForecastModel> models = forecastService.produceAndSend(apiOrderForecast, currentApiUser().name);
List<Forecast> forecasts = new ForecastMapper().mapToApi(models);
JsonNode jsonOut = Json.toJson(forecasts);
return ok(callback, jsonOut);
}
@TokenAuthorize(requiredPermission = PermissionType.INVOICING)
public Result search(String callback) {
JsonNode body = request().body().asJson();
ObjectMapper mapper = new ObjectMapper();
ForecastSearchParams apiSearch;
try {
apiSearch = mapper.readValue(body.toString(), ForecastSearchParams.class);
} catch (IOException e) {
return badRequest("json post parameter parsing failure: " + e.getMessage());
}
List<models.ForecastSearchResult> forecastSearchResults = new ForecastService(currentApiUser().username).search(apiSearch);
List<api.v1.ForecastSearchResult> searchResults = new ForecastSearchResultMapper().mapToApi(forecastSearchResults);
JsonNode jsonOut = Json.toJson(searchResults);
return ok(callback, jsonOut);
}
}