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); } }