Author: meynier Date: 2013-07-26 16:28:28 +0200 (Fri, 26 Jul 2013) New Revision: 377 Url: http://chorem.org/projects/chorem/repository/revisions/377 Log: Updated adc calculation method and small changes on the employee edit interface Modified: trunk/chorem-entities/src/main/java/org/chorem/project/AdcCalculation.java trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/EmployeeEditAction.java trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/employeeEdit.jsp trunk/chorem-webmotion/src/main/webapp/js/employeeEdit.js Modified: trunk/chorem-entities/src/main/java/org/chorem/project/AdcCalculation.java =================================================================== --- trunk/chorem-entities/src/main/java/org/chorem/project/AdcCalculation.java 2013-07-25 15:23:55 UTC (rev 376) +++ trunk/chorem-entities/src/main/java/org/chorem/project/AdcCalculation.java 2013-07-26 14:28:28 UTC (rev 377) @@ -3,13 +3,16 @@ import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; +import java.util.List; import org.chorem.ChoremClient; import org.chorem.ChoremUtil; +import org.chorem.entities.Employee; import org.chorem.entities.EmployeeHR; import org.chorem.entities.Interval; import org.chorem.entities.Quotation; import org.chorem.entities.Time; +import org.chorem.entities.Company; import org.nuiton.wikitty.query.WikittyQuery; import org.nuiton.wikitty.query.WikittyQueryMaker; import org.nuiton.wikitty.query.WikittyQueryResult; @@ -18,14 +21,20 @@ ChoremClient client; EmployeeHR e; + Company company; Date start; Date end; + /** + * Calculates the total gains made by the company in one year + * @return + */ public double getTotalGain() { WikittyQuery gainQuery = new WikittyQueryMaker() .and() .exteq("Closed") + .containsOne(Quotation.ELEMENT_FIELD_QUOTATION_SUPPLIER, getEmployeesHR()) .or() .bw(Interval.FQ_FIELD_INTERVAL_BEGINDATE, start, end) .bw(Interval.FQ_FIELD_INTERVAL_ENDDATE, start, end) @@ -41,27 +50,48 @@ return total; } + /** + * calculates all the salaries of the employees ponderated by the productivity rate + * @return + */ public double getTotalSalaries() { - //pondéré par pct d eproductivité - WikittyQuery employeeQuery = new WikittyQueryMaker().exteq("EmployeeHR").end(); - WikittyQueryResult<EmployeeHR> result = client.findAllByQuery(EmployeeHR.class, employeeQuery); + //pondéré par pct de productivité + double total = 0; - for(EmployeeHR e : result.getAll()) { + for(EmployeeHR e : getEmployeesHR()) { total += e.getSalary() * (e.getProductivityRate()/100); } return total; } + private List<EmployeeHR> getEmployeesHR() { + WikittyQuery employeeQuery = new WikittyQueryMaker().and() + .exteq("EmployeeHR") + .eq(Employee.ELEMENT_FIELD_EMPLOYEE_COMPANY, company) + .end(); + WikittyQueryResult<EmployeeHR> result = client.findAllByQuery(EmployeeHR.class, employeeQuery); + return result.getAll(); + + } + + /** + * Calculates the sum of all the tims object linked to the company + * @return + */ public double getTotalTimes() { + WikittyQuery empQuery = new WikittyQueryMaker() + .eq(Employee.ELEMENT_FIELD_EMPLOYEE_COMPANY, company).end(); + WikittyQueryResult<Employee> empResult = client.findAllByQuery(Employee.class, empQuery); + WikittyQuery timeQuery = new WikittyQueryMaker() .and() .exteq("Time") + .containsOne(Time.ELEMENT_FIELD_TIME_EMPLOYEE, empResult.getAll()) .or() .bw(Interval.FQ_FIELD_INTERVAL_BEGINDATE, start, end) .bw(Interval.FQ_FIELD_INTERVAL_ENDDATE, start, end) .end(); - WikittyQueryResult<Time> result = client.findAllByQuery(Time.class, timeQuery); double total = 0; @@ -73,17 +103,18 @@ } public double getAdc() { - end = new GregorianCalendar().getTime(); - Calendar start = new GregorianCalendar(); - start.add(Calendar.YEAR, -1); - this.start = start.getTime(); + double expenses = getTotalGain(); double salaries = getTotalSalaries(); double times = getTotalTimes(); double dailyHoursWorked = client.getDailyHoursWorked(e); double dailySalary = client.restore(e.getWikittyId()).getFieldAsDouble("EmployeeHR", "salary")/21.5; - + System.out.println("GAIN : " + expenses); + System.out.println("SALAIRES : " + salaries); + System.out.println("TIMES : " + times); + System.out.println("DAILY HW : " + dailyHoursWorked); + System.out.println("DAILY SALARY : " + dailySalary); double adc = ( (expenses/salaries)/times ) * dailyHoursWorked * dailySalary; @@ -93,7 +124,12 @@ public AdcCalculation(EmployeeHR e, ChoremClient client) { this.e = e; + this.company = e.getCompany(false); this.client = client; + this.end = new GregorianCalendar().getTime(); + Calendar start = new GregorianCalendar(); + start.add(Calendar.YEAR, -1); + this.start = start.getTime(); } Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/EmployeeEditAction.java =================================================================== --- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/EmployeeEditAction.java 2013-07-25 15:23:55 UTC (rev 376) +++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/EmployeeEditAction.java 2013-07-26 14:28:28 UTC (rev 377) @@ -130,10 +130,9 @@ public Render requestAdc(ChoremClient client, String employeeId) { EmployeeHR e = new EmployeeHRImpl(client.restore(employeeId)); AdcCalculation adcCalc = new AdcCalculation(e, client); - System.out.println("Adc created"); double adc = adcCalc.getAdc(); - System.out.println("ADC calculated"); - return renderJSON("adc", adc); + int iadc = (int)(adc*100); + return renderJSON("adc", (double)(iadc/100.0)); } Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/employeeEdit.jsp =================================================================== --- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/employeeEdit.jsp 2013-07-25 15:23:55 UTC (rev 376) +++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/employeeEdit.jsp 2013-07-26 14:28:28 UTC (rev 377) @@ -95,7 +95,11 @@ maxFractionDigits="2" value="${employee.productivityRate}"/>%</td> <td class="partialTime"><f:formatNumber type="number" maxFractionDigits="2" value="${employee.partialTime}"/>%</td> - <td class="dailyReturn"><span class="adc"><f:formatNumber type="number" + <td class="dailyReturn" + <c:if test='${employee.object.wikitty.hasExtension("EmployeeHR")}'> + refresh="true" + </c:if> + ><span class="adc"><f:formatNumber type="number" maxFractionDigits="2" value="${employee.dailyReturn}"/></span> <c:if test='${employee.object.wikitty.hasExtension("EmployeeHR")}'> <a class="cjmRefresh" style="cursor:pointer"> Modified: trunk/chorem-webmotion/src/main/webapp/js/employeeEdit.js =================================================================== --- trunk/chorem-webmotion/src/main/webapp/js/employeeEdit.js 2013-07-25 15:23:55 UTC (rev 376) +++ trunk/chorem-webmotion/src/main/webapp/js/employeeEdit.js 2013-07-26 14:28:28 UTC (rev 377) @@ -47,7 +47,10 @@ displayEdit(row); - displayDailyReturn(row, $.trim(cjm.attr('oldVal'))); + var refresh = false; + if(cjm.attr("refresh") === "true") + refresh = true; + displayDailyReturn(row, $.trim(cjm.attr('oldVal')), refresh); } @@ -88,9 +91,11 @@ salary.html(data['salary']); prod.html(data["productivityRate"]+"%"); time.html(data['partialTime']+"%"); - displayDailyReturn(row, data['dailyReturn']); + displayDailyReturn(row, data['dailyReturn'], true); row.find('.dailyHoursWorked').html(data['dailyHoursWorked']); displayEdit(row); + if(cell.attr("refresh") !== "true") + cell.attr('refresh', 'true'); } @@ -139,9 +144,12 @@ cell.find(".employeeEdit").click(employeeEdit); } - function displayDailyReturn(row, val) { - row.find('.dailyReturn').html('<span class="adc">' + val + ' </span><a class="cjmRefresh" style="cursor:pointer">' - +'<i class="icon icon-refresh"></i></a>'); + function displayDailyReturn(row, val, icon) { + var cell = row.find('.dailyReturn'); + var str = '<span class="adc">' + val + ' </span><a class="cjmRefresh" style="cursor:pointer">' + if(icon) + str += '<i class="icon icon-refresh"></i></a>' + cell.html(str); row.find(".cjmRefresh").click(calculateAdc); }