=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataset/CompleteDataSetRegistration.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataset/CompleteDataSetRegistration.java 2014-10-13 05:01:18 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataset/CompleteDataSetRegistration.java 2014-10-13 12:24:47 +0000 @@ -201,7 +201,6 @@ } @JsonProperty - @JsonSerialize( as = BaseIdentifiableObject.class ) @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public Period getPeriod() { @@ -215,7 +214,7 @@ @JsonProperty( value = "organisationUnit" ) @JsonSerialize( as = BaseIdentifiableObject.class ) - @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) + @JacksonXmlProperty( localName = "organisationUnit", namespace = DxfNamespaces.DXF_2_0 ) public OrganisationUnit getSource() { return source; === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/Period.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/Period.java 2014-09-22 06:49:26 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/period/Period.java 2014-10-13 12:24:47 +0000 @@ -28,9 +28,12 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import java.text.SimpleDateFormat; -import java.util.Date; - +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonView; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import org.hisp.dhis.common.BaseNameableObject; import org.hisp.dhis.common.DxfNamespaces; import org.hisp.dhis.common.Weighted; @@ -41,17 +44,13 @@ import org.joda.time.DateTime; import org.joda.time.Days; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonView; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import java.text.SimpleDateFormat; +import java.util.Date; /** * @author Kristian Nordal */ -@JacksonXmlRootElement( localName = "period", namespace = DxfNamespaces.DXF_2_0) +@JacksonXmlRootElement( localName = "period", namespace = DxfNamespaces.DXF_2_0 ) public class Period extends BaseNameableObject implements Weighted @@ -77,7 +76,7 @@ * Required. Must be unique together with startDate. */ private Date endDate; - + /** * Transient string holding the ISO representation of the period. */ @@ -126,12 +125,17 @@ return getIsoDate(); } + public String getRealUid() + { + return uid; + } + @Override public String getCode() { return getIsoDate(); } - + @Override public String getName() { @@ -195,7 +199,7 @@ { return getMediumDateString( startDate ); } - + /** * Returns end date formatted as string. * @@ -227,7 +231,7 @@ * * @param type the period type. * @return the potential number of periods of the given period type spanned - * by this period. + * by this period. */ public int getPeriodSpan( PeriodType type ) { @@ -239,7 +243,7 @@ /** * Returns the number of days in the period, i.e. the days between the start * and end date. - * + * * @return number of days in period. */ public int getDaysInPeriod() @@ -247,7 +251,7 @@ Days days = Days.daysBetween( new DateTime( startDate ), new DateTime( endDate ) ); return days.getDays() + 1; } - + /** * Validates this period. TODO Make more comprehensive. */ @@ -257,15 +261,15 @@ { return false; } - + if ( !DailyPeriodType.NAME.equals( periodType.getName() ) && getDaysInPeriod() < 2 ) { return false; } - + return true; } - + // ------------------------------------------------------------------------- // hashCode, equals and toString // ------------------------------------------------------------------------- @@ -319,7 +323,21 @@ // ------------------------------------------------------------------------- @JsonProperty - @JsonView( {DetailedView.class, ExportView.class} ) + @JsonView( { DetailedView.class, ExportView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) + public Date getStartDate() + { + return startDate; + } + + public void setStartDate( Date startDate ) + { + this.startDate = startDate; + } + + @JsonProperty + @JsonView( { DetailedView.class, ExportView.class } ) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public Date getEndDate() { return endDate; @@ -333,8 +351,7 @@ @JsonProperty @JsonSerialize( using = JacksonPeriodTypeSerializer.class ) @JsonDeserialize( using = JacksonPeriodTypeDeserializer.class ) - @JsonView( {DetailedView.class, ExportView.class} ) - @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0) + @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) public PeriodType getPeriodType() { return periodType; @@ -344,16 +361,4 @@ { this.periodType = periodType; } - - @JsonProperty - @JsonView( {DetailedView.class, ExportView.class} ) - public Date getStartDate() - { - return startDate; - } - - public void setStartDate( Date startDate ) - { - this.startDate = startDate; - } } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/dataset/hibernate/CompleteDataSetRegistration.hbm.xml' --- dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/dataset/hibernate/CompleteDataSetRegistration.hbm.xml 2014-06-23 19:13:26 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/dataset/hibernate/CompleteDataSetRegistration.hbm.xml 2014-10-13 12:24:47 +0000 @@ -13,12 +13,13 @@ foreign-key="fk_datasetcompleteregistration_periodid" /> - - + === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/period/hibernate/Period.hbm.xml' --- dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/period/hibernate/Period.hbm.xml 2011-05-28 21:25:46 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/period/hibernate/Period.hbm.xml 2014-10-13 12:24:47 +0000 @@ -11,6 +11,7 @@ + === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/CompleteDataSetRegistrationController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/CompleteDataSetRegistrationController.java 2014-10-13 05:01:18 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/CompleteDataSetRegistrationController.java 2014-10-13 12:24:47 +0000 @@ -29,6 +29,7 @@ */ import org.apache.commons.lang.StringUtils; +import org.hisp.dhis.common.IdentifiableObject; import org.hisp.dhis.common.IdentifiableObjectManager; import org.hisp.dhis.common.view.BasicView; import org.hisp.dhis.datacompletion.CompleteDataSetRegistrationRequest; @@ -53,18 +54,22 @@ import org.hisp.dhis.webapi.utils.InputUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.client.HttpClientErrorException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; +import java.util.GregorianCalendar; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -140,6 +145,7 @@ response.setContentType( CONTENT_TYPE_JSON ); CompleteDataSetRegistrations completeDataSetRegistrations = getCompleteDataSetRegistrations( dataSet, period, startDate, endDate, orgUnit, children ); + JacksonUtils.toJsonWithView( response.getOutputStream(), completeDataSetRegistrations, BasicView.class ); } @@ -199,6 +205,44 @@ private void saveCompleteDataSetRegistrations( CompleteDataSetRegistrations completeDataSetRegistrations ) { + for ( CompleteDataSetRegistration completeDataSetRegistration : completeDataSetRegistrations.getCompleteDataSetRegistrations() ) + { + Period period = getObject( completeDataSetRegistration.getPeriod() ); + DataSet dataSet = getObject( completeDataSetRegistration.getDataSet() ); + DataElementCategoryOptionCombo attributeOptionCombo = getObject( completeDataSetRegistration.getAttributeOptionCombo() ); + OrganisationUnit organisationUnit = getObject( completeDataSetRegistration.getSource() ); + + Date date = completeDataSetRegistration.getDate(); + String storedBy = completeDataSetRegistration.getStoredBy(); + + registerCompleteDataSet( dataSet, period, organisationUnit, attributeOptionCombo, storedBy, date ); + } + } + + @SuppressWarnings( "unchecked" ) + private TT getObject( TT object ) + { + if ( object == null ) + { + return null; + } + + if ( Period.class.isInstance( object ) ) + { + return (TT) periodService.reloadIsoPeriod( ((Period) object).getRealUid() ); + } + + if ( object.getUid() != null ) + { + return (TT) manager.get( object.getClass(), object.getUid() ); + } + + if ( object.getCode() != null ) + { + return (TT) manager.get( object.getClass(), object.getCode() ); + } + + return null; } @RequestMapping( method = RequestMethod.POST, produces = "text/plain" ) @@ -329,8 +373,7 @@ String cc = completeDataSetRegistrationRequest.getCc(); String cp = completeDataSetRegistrationRequest.getCp(); - DataElementCategoryOptionCombo attributeOptionCombo = inputUtils - .getAttributeOptionCombo( response, cc, cp ); + DataElementCategoryOptionCombo attributeOptionCombo = inputUtils.getAttributeOptionCombo( response, cc, cp ); if ( attributeOptionCombo == null ) { @@ -465,29 +508,63 @@ // ------------------------------------------------------------------------- // Supportive methods // ------------------------------------------------------------------------- + private CompleteDataSetRegistration registerCompleteDataSet( DataSet dataSet, Period period, - OrganisationUnit orgUnit, DataElementCategoryOptionCombo attributeOptionCombo, String storedBy, - Date completionDate ) + OrganisationUnit orgUnit, DataElementCategoryOptionCombo attributeOptionCombo, String storedBy, Date completionDate ) { I18nFormat format = i18nManager.getI18nFormat(); - if ( registrationService.getCompleteDataSetRegistration( dataSet, period, orgUnit, attributeOptionCombo ) == - null ) - { - CompleteDataSetRegistration registration = new CompleteDataSetRegistration(); + if ( dataSet == null ) + { + throw new HttpClientErrorException( HttpStatus.BAD_REQUEST, "DataSet can not be null." ); + } + + if ( period == null ) + { + throw new HttpClientErrorException( HttpStatus.BAD_REQUEST, "period can not be null." ); + } + + if ( orgUnit == null ) + { + throw new HttpClientErrorException( HttpStatus.BAD_REQUEST, "organisationUnit can not be null" ); + } + + if ( attributeOptionCombo == null ) + { + throw new HttpClientErrorException( HttpStatus.BAD_REQUEST, "attributeOptionCombo can not be null" ); + } + + CompleteDataSetRegistration registration = registrationService.getCompleteDataSetRegistration( dataSet, period, + orgUnit, attributeOptionCombo ); + + if ( registration == null ) + { + registration = new CompleteDataSetRegistration(); registration.setDataSet( dataSet ); registration.setPeriod( period ); registration.setSource( orgUnit ); registration.setAttributeOptionCombo( attributeOptionCombo ); - registration.setDate( completionDate ); - registration.setStoredBy( storedBy ); - registration.setPeriodName( format.formatPeriod( registration.getPeriod() ) ); - - return registration; - } - - return null; + + registration.setDate( completionDate != null ? completionDate : new Date() ); + registration.setStoredBy( storedBy != null ? storedBy : currentUserService.getCurrentUsername() ); + registration.setPeriodName( format.formatPeriod( registration.getPeriod() ) ); + + System.err.println( "saveCompleteDataSetRegistration" ); + registrationService.saveCompleteDataSetRegistration( registration ); + } + else + { + registration.setDate( completionDate != null ? completionDate : new Date() ); + registration.setStoredBy( storedBy != null ? storedBy : currentUserService.getCurrentUsername() ); + registration.setPeriodName( format.formatPeriod( registration.getPeriod() ) ); + + System.err.println( "updateCompleteDataSetRegistration" ); + registrationService.updateCompleteDataSetRegistration( registration ); + } + + + return registration; } private void unRegisterCompleteDataSet( Set dataSets, Period period,