Great, thanks Lars! On Wed, Feb 15, 2017 at 9:20 AM, Lars Helge Øverland <[email protected]> wrote:
> I cannot remember exactly but I think it was in 2.20. > > The startup fix was backported to 2.25, 2.26. > > regards, > > Lars > > > On Tue, Feb 14, 2017 at 11:33 PM, Lorill Crees <[email protected]> wrote: > >> Thanks for the quick response Lars. >> >> In which version was it removed? We are managing multiple instances on >> different versions and I just want to make sure we remove it from the right >> ones. >> >> Thanks! >> >> On Tue, Feb 14, 2017 at 2:20 PM, Lars Helge Øverland <[email protected]> >> wrote: >> >>> Hi Lorill, >>> >>> this happens due to a lingering legacy database table. We will include a >>> startup statement to remove it. In the meantime you can run this SQL >>> against your database: >>> >>> drop table caseaggregationcondition; >>> >>> regards, >>> >>> Lars >>> >>> >>> On Tue, Feb 14, 2017 at 11:10 PM, Lorill Crees <[email protected]> >>> wrote: >>> >>>> Hi Lars, >>>> >>>> I am attempting to delete a data element via the API and am getting the >>>> below error, due to a foreign key constraint on table >>>> "caseaggregationcondition". >>>> >>>> What are CaseAggregationConditions and where are they in the DHIS 2 UI? >>>> >>>> In your prior email to Channara you said that "If you upgrade to a >>>> later version of DHIS 2, those have been removed completely." >>>> >>>> Which version has these removed completely? We are using DHIS 2 >>>> Version: >>>> 2.25 >>>> Build revision: >>>> a143100 >>>> Build date: >>>> 2017-02-07 14:28 >>>> >>>> If they have not been removed in 2.25, how can we delete them via the >>>> Web API? >>>> >>>> Thanks, >>>> >>>> Lorill >>>> >>>> >>>> >>>> * ERROR 2017-02-14 13:25:49,092 ERROR: update or delete on table >>>> "dataelement" violates foreign key constraint >>>> "fk_caseaggregationcondition_dataelement" >>>> on table "caseaggregationcondition" >>>> Detail: Key (dataelementid)=(109575) is still referenced from table >>>> "caseaggregationcondition". (SqlExceptionHelper.java >>>> [http-nio-8090-exec-8]) >>>> org.hibernate.exception.ConstraintViolationException: could not >>>> execute statement >>>> at org.hibernate.exception.internal.SQLStateConversionDelegate. >>>> convert(SQLStateConversionDelegate.java:112) >>>> at org.hibernate.exception.internal.StandardSQLExceptionConvert >>>> er.convert(StandardSQLExceptionConverter.java:42) >>>> at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(Sql >>>> ExceptionHelper.java:111) >>>> at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(Sql >>>> ExceptionHelper.java:97) >>>> at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.execu >>>> teUpdate(ResultSetReturnImpl.java:207) >>>> at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.ad >>>> dToBatch(NonBatchingBatch.java:45) >>>> at org.hibernate.persister.entity.AbstractEntityPersister.delet >>>> e(AbstractEntityPersister.java:3233) >>>> at org.hibernate.persister.entity.AbstractEntityPersister.delet >>>> e(AbstractEntityPersister.java:3470) >>>> at org.hibernate.action.internal.EntityDeleteAction.execute(Ent >>>> ityDeleteAction.java:98) >>>> at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQu >>>> eue.java:560) >>>> at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQu >>>> eue.java:434) >>>> at org.hibernate.event.internal.AbstractFlushingEventListener.p >>>> erformExecutions(AbstractFlushingEventListener.java:337) >>>> at org.hibernate.event.internal.DefaultFlushEventListener.onFlu >>>> sh(DefaultFlushEventListener.java:39) >>>> at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1295) >>>> at org.hisp.dhis.dxf2.metadata.objectbundle.DefaultObjectBundle >>>> Service.commit(DefaultObjectBundleService.java:158) >>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce >>>> ssorImpl.java:62) >>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe >>>> thodAccessorImpl.java:43) >>>> at java.lang.reflect.Method.invoke(Method.java:483) >>>> at org.springframework.aop.support.AopUtils.invokeJoinpointUsin >>>> gReflection(AopUtils.java:302) >>>> at org.springframework.aop.framework.ReflectiveMethodInvocation >>>> .invokeJoinpoint(ReflectiveMethodInvocation.java:190) >>>> at org.springframework.aop.framework.ReflectiveMethodInvocation >>>> .proceed(ReflectiveMethodInvocation.java:157) >>>> at org.springframework.transaction.interceptor.TransactionInter >>>> ceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) >>>> at org.springframework.transaction.interceptor.TransactionAspec >>>> tSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) >>>> at org.springframework.transaction.interceptor.TransactionInter >>>> ceptor.invoke(TransactionInterceptor.java:96) >>>> at org.springframework.aop.framework.ReflectiveMethodInvocation >>>> .proceed(ReflectiveMethodInvocation.java:179) >>>> at org.springframework.aop.framework.JdkDynamicAopProxy.invoke( >>>> JdkDynamicAopProxy.java:208) >>>> at com.sun.proxy.$Proxy186.commit(Unknown Source) >>>> at org.hisp.dhis.dxf2.metadata.DefaultMetadataImportService.imp >>>> ortMetadata(DefaultMetadataImportService.java:126) >>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce >>>> ssorImpl.java:62) >>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe >>>> thodAccessorImpl.java:43) >>>> at java.lang.reflect.Method.invoke(Method.java:483) >>>> at org.springframework.aop.support.AopUtils.invokeJoinpointUsin >>>> gReflection(AopUtils.java:302) >>>> at org.springframework.aop.framework.ReflectiveMethodInvocation >>>> .invokeJoinpoint(ReflectiveMethodInvocation.java:190) >>>> at org.springframework.aop.framework.ReflectiveMethodInvocation >>>> .proceed(ReflectiveMethodInvocation.java:157) >>>> at org.springframework.transaction.interceptor.TransactionInter >>>> ceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) >>>> at org.springframework.transaction.interceptor.TransactionAspec >>>> tSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) >>>> at org.springframework.transaction.interceptor.TransactionInter >>>> ceptor.invoke(TransactionInterceptor.java:96) >>>> at org.springframework.aop.framework.ReflectiveMethodInvocation >>>> .proceed(ReflectiveMethodInvocation.java:179) >>>> at org.springframework.aop.framework.JdkDynamicAopProxy.invoke( >>>> JdkDynamicAopProxy.java:208) >>>> at com.sun.proxy.$Proxy188.importMetadata(Unknown Source) >>>> at org.hisp.dhis.webapi.controller.AbstractCrudController.delet >>>> eObject(AbstractCrudController.java:772) >>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce >>>> ssorImpl.java:62) >>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe >>>> thodAccessorImpl.java:43) >>>> at java.lang.reflect.Method.invoke(Method.java:483) >>>> at org.springframework.web.method.support.InvocableHandlerMetho >>>> d.doInvoke(InvocableHandlerMethod.java:221) >>>> at org.springframework.web.method.support.InvocableHandlerMetho >>>> d.invokeForRequest(InvocableHandlerMethod.java:136) >>>> at org.springframework.web.servlet.mvc.method.annotation.Servle >>>> tInvocableHandlerMethod.invokeAndHandle(ServletInvocableHand >>>> lerMethod.java:110) >>>> at org.springframework.web.servlet.mvc.method.annotation.Reques >>>> tMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHan >>>> dlerAdapter.java:817) >>>> at org.springframework.web.servlet.mvc.method.annotation.Reques >>>> tMappingHandlerAdapter.handleInternal(RequestMappingHandlerA >>>> dapter.java:731) >>>> at org.springframework.web.servlet.mvc.method.AbstractHandlerMe >>>> thodAdapter.handle(AbstractHandlerMethodAdapter.java:85) >>>> at org.springframework.web.servlet.DispatcherServlet.doDispatch >>>> (DispatcherServlet.java:959) >>>> at org.springframework.web.servlet.DispatcherServlet.doService( >>>> DispatcherServlet.java:893) >>>> at org.springframework.web.servlet.FrameworkServlet.processRequ >>>> est(FrameworkServlet.java:968) >>>> at org.springframework.web.servlet.FrameworkServlet.doDelete(Fr >>>> ameworkServlet.java:892) >>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:654) >>>> at org.springframework.web.servlet.FrameworkServlet.service(Fra >>>> meworkServlet.java:844) >>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) >>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi >>>> lter(ApplicationFilterChain.java:291) >>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App >>>> licationFilterChain.java:206) >>>> at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilte >>>> r.java:52) >>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi >>>> lter(ApplicationFilterChain.java:239) >>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App >>>> licationFilterChain.java:206) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:330) >>>> at org.springframework.security.web.access.intercept.FilterSecu >>>> rityInterceptor.invoke(FilterSecurityInterceptor.java:118) >>>> at org.springframework.security.web.access.intercept.FilterSecu >>>> rityInterceptor.doFilter(FilterSecurityInterceptor.java:84) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.access.ExceptionTranslation >>>> Filter.doFilter(ExceptionTranslationFilter.java:113) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.session.SessionManagementFi >>>> lter.doFilter(SessionManagementFilter.java:103) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.authentication.AnonymousAut >>>> henticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.servletapi.SecurityContextH >>>> olderAwareRequestFilter.doFilter(SecurityContextHolderAwareR >>>> equestFilter.java:154) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.savedrequest.RequestCacheAw >>>> areFilter.doFilter(RequestCacheAwareFilter.java:45) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.authentication.www.BasicAut >>>> henticationFilter.doFilter(BasicAuthenticationFilter.java:201) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.hisp.dhis.security.filter.CorsFilter.doFilter(CorsFilter >>>> .java:91) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.authentication.AbstractAuth >>>> enticationProcessingFilter.doFilter(AbstractAuthenticationPr >>>> ocessingFilter.java:199) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.authentication.AbstractAuth >>>> enticationProcessingFilter.doFilter(AbstractAuthenticationPr >>>> ocessingFilter.java:199) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.hisp.dhis.security.filter.CustomAuthenticationFilter.doF >>>> ilter(CustomAuthenticationFilter.java:64) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.oauth2.provider.authentication. >>>> OAuth2AuthenticationProcessingFilter.doFilter(OAuth2Authenti >>>> cationProcessingFilter.java:140) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.authentication.logout.Logou >>>> tFilter.doFilter(LogoutFilter.java:110) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.hisp.dhis.security.filter.AutomaticAccessFilter.doFilter >>>> (AutomaticAccessFilter.java:115) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.header.HeaderWriterFilter.d >>>> oFilterInternal(HeaderWriterFilter.java:57) >>>> at org.springframework.web.filter.OncePerRequestFilter.doFilter >>>> (OncePerRequestFilter.java:107) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.context.request.async.WebAs >>>> yncManagerIntegrationFilter.doFilterInternal(WebAsyncManager >>>> IntegrationFilter.java:50) >>>> at org.springframework.web.filter.OncePerRequestFilter.doFilter >>>> (OncePerRequestFilter.java:107) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.context.SecurityContextPers >>>> istenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) >>>> at org.springframework.security.web.FilterChainProxy$VirtualFil >>>> terChain.doFilter(FilterChainProxy.java:342) >>>> at org.springframework.security.web.FilterChainProxy.doFilterIn >>>> ternal(FilterChainProxy.java:192) >>>> at org.springframework.security.web.FilterChainProxy.doFilter(F >>>> ilterChainProxy.java:160) >>>> at org.springframework.web.filter.DelegatingFilterProxy.invokeD >>>> elegate(DelegatingFilterProxy.java:346) >>>> at org.springframework.web.filter.DelegatingFilterProxy.doFilte >>>> r(DelegatingFilterProxy.java:262) >>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi >>>> lter(ApplicationFilterChain.java:239) >>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App >>>> licationFilterChain.java:206) >>>> at org.hisp.dhis.servlet.filter.HttpUrlPatternFilter.doFilter(H >>>> ttpUrlPatternFilter.java:105) >>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi >>>> lter(ApplicationFilterChain.java:239) >>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App >>>> licationFilterChain.java:206) >>>> at org.springframework.web.filter.ShallowEtagHeaderFilter.doFil >>>> terInternal(ShallowEtagHeaderFilter.java:87) >>>> at org.hisp.dhis.servlet.filter.ExcludableShallowEtagHeaderFilt >>>> er.doFilterInternal(ExcludableShallowEtagHeaderFilter.java:110) >>>> at org.springframework.web.filter.OncePerRequestFilter.doFilter >>>> (OncePerRequestFilter.java:107) >>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi >>>> lter(ApplicationFilterChain.java:239) >>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App >>>> licationFilterChain.java:206) >>>> at org.springframework.orm.hibernate5.support.OpenSessionInView >>>> Filter.doFilterInternal(OpenSessionInViewFilter.java:151) >>>> at org.springframework.web.filter.OncePerRequestFilter.doFilter >>>> (OncePerRequestFilter.java:107) >>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi >>>> lter(ApplicationFilterChain.java:239) >>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App >>>> licationFilterChain.java:206) >>>> at org.springframework.web.filter.CharacterEncodingFilter.doFil >>>> terInternal(CharacterEncodingFilter.java:121) >>>> at org.springframework.web.filter.OncePerRequestFilter.doFilter >>>> (OncePerRequestFilter.java:107) >>>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi >>>> lter(ApplicationFilterChain.java:239) >>>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App >>>> licationFilterChain.java:206) >>>> at org.apache.catalina.core.StandardWrapperValve.invoke(Standar >>>> dWrapperValve.java:219) >>>> at org.apache.catalina.core.StandardContextValve.invoke(Standar >>>> dContextValve.java:106) >>>> at org.apache.catalina.authenticator.AuthenticatorBase.invoke(A >>>> uthenticatorBase.java:502) >>>> at org.apache.catalina.core.StandardHostValve.invoke(StandardHo >>>> stValve.java:142) >>>> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorRepo >>>> rtValve.java:79) >>>> at org.apache.catalina.valves.AbstractAccessLogValve.invoke(Abs >>>> tractAccessLogValve.java:610) >>>> at org.apache.catalina.core.StandardEngineValve.invoke(Standard >>>> EngineValve.java:88) >>>> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAd >>>> apter.java:518) >>>> at org.apache.coyote.http11.AbstractHttp11Processor.process(Abs >>>> tractHttp11Processor.java:1091) >>>> at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler >>>> .process(AbstractProtocol.java:668) >>>> at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionH >>>> andler.process(Http11NioProtocol.java:223) >>>> at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun >>>> (NioEndpoint.java:1517) >>>> at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(N >>>> ioEndpoint.java:1474) >>>> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool >>>> Executor.java:1142) >>>> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo >>>> lExecutor.java:617) >>>> at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.r >>>> un(TaskThread.java:61) >>>> at java.lang.Thread.run(Thread.java:745) >>>> Caused by: org.postgresql.util.PSQLException: ERROR: update or delete >>>> on table "dataelement" violates foreign key constraint >>>> "fk_caseaggregationcondition_dataelement" on table >>>> "caseaggregationcondition" >>>> Detail: Key (dataelementid)=(109575) is still referenced from table >>>> "caseaggregationcondition". >>>> at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorRespons >>>> e(QueryExecutorImpl.java:2455) >>>> at org.postgresql.core.v3.QueryExecutorImpl.processResults(Quer >>>> yExecutorImpl.java:2155) >>>> at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecut >>>> orImpl.java:288) >>>> at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement. >>>> java:430) >>>> at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:356) >>>> at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgP >>>> reparedStatement.java:168) >>>> at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPrep >>>> aredStatement.java:135) >>>> at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUp >>>> date(NewProxyPreparedStatement.java:105) >>>> at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.execu >>>> teUpdate(ResultSetReturnImpl.java:204) >>>> ... 137 more >>>> >>>> >>>> >>>> On Tue, Dec 13, 2016 at 1:13 AM, Lars Helge Øverland <[email protected]> >>>> wrote: >>>> >>>>> Hi Channara, >>>>> >>>>> that means that the delete was not allowed due to case aggregation >>>>> conditions still referencing the data element. You need to the delete the >>>>> case aggregation queries first. If you upgrade to a later version of DHIS >>>>> 2, those have been removed completely. >>>>> >>>>> regards, >>>>> >>>>> Lars >>>>> >>>>> On Tue, Dec 13, 2016 at 9:50 AM, channara rin <[email protected]> >>>>> wrote: >>>>> >>>>>> dear all, >>>>>> i want to delete in data elements. but when i click remove, i got >>>>>> console like below: >>>>>> * INFO 2016-12-13 15:48:27,917 Delete was not allowed by >>>>>> CaseAggregationConditionDeletionHandler: CaseAggregationCondition >>>>>> (DefaultDeletionManager.java [http-nio-80-exec-8]) >>>>>> >>>>>> do you know this problem, how can i delete it? >>>>>> >>>>>> thank you >>>>>> channara >>>>>> >>>>>> _______________________________________________ >>>>>> Mailing list: https://launchpad.net/~dhis2-users >>>>>> Post to : [email protected] >>>>>> Unsubscribe : https://launchpad.net/~dhis2-users >>>>>> More help : https://help.launchpad.net/ListHelp >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Lars Helge Øverland >>>>> Lead developer, DHIS 2 >>>>> University of Oslo >>>>> Skype: larshelgeoverland >>>>> [email protected] >>>>> http://www.dhis2.org <https://www.dhis2.org/> >>>>> >>>>> >>>>> _______________________________________________ >>>>> Mailing list: https://launchpad.net/~dhis2-devs >>>>> Post to : [email protected] >>>>> Unsubscribe : https://launchpad.net/~dhis2-devs >>>>> More help : https://help.launchpad.net/ListHelp >>>>> >>>>> >>>> >>>> >>>> -- >>>> Lorill Crees >>>> Project Leader / Senior Developer >>>> 2Paths Solutions Ltd. <http://www.2paths.com> >>>> >>>> [email protected] >>>> skype: lorill2paths >>>> (604) 689-4123 x 15 <(604)%20689-4123> >>>> >>> >>> >>> >>> -- >>> Lars Helge Øverland >>> Lead developer, DHIS 2 >>> University of Oslo >>> Skype: larshelgeoverland >>> [email protected] >>> http://www.dhis2.org <https://www.dhis2.org/> >>> >>> >> >> >> -- >> Lorill Crees >> Project Leader / Senior Developer >> 2Paths Solutions Ltd. <http://www.2paths.com> >> >> [email protected] >> skype: lorill2paths >> (604) 689-4123 x 15 <(604)%20689-4123> >> > > > > -- > Lars Helge Øverland > Lead developer, DHIS 2 > University of Oslo > Skype: larshelgeoverland > [email protected] > http://www.dhis2.org <https://www.dhis2.org/> > > -- Lorill Crees Project Leader / Senior Developer 2Paths Solutions Ltd. <http://www.2paths.com> [email protected] skype: lorill2paths (604) 689-4123 x 15
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : [email protected] Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp

