<div dir="ltr">I think I fixed it, but the broken constraint is still showing, i don&#39;t know how to remove it. I did this:<div><br></div><div style>verified if the engineer skill list had the same size or bigger than the requiredSkillList, iterate to check skills between both counting the matches and then, if the match was 100% to other, give the workorder</div>
<div><br></div><div><div><span class="" style="white-space:pre">                        </span>if (e.getSkillEngineerList().size() &gt;= requiredSkillList.size()) {</div><div><span class="" style="white-space:pre">                                </span>int temp = 0;</div>
<div><span class="" style="white-space:pre">                                </span>for (SkillEngineer se : e.getSkillEngineerList()) {</div><div><span class="" style="white-space:pre">                                        </span>for (Skill s : requiredSkillList) {</div><div><span class="" style="white-space:pre">                                                </span>if (se.getSkill().getId() == s.getId()) {</div>
<div><span class="" style="white-space:pre">                                                        </span>temp++;</div><div><span class="" style="white-space:pre">                                                </span>}</div><div><span class="" style="white-space:pre">                                        </span>}</div><div><span class="" style="white-space:pre">                                </span>}</div>
<div><span class="" style="white-space:pre">                                </span>if (temp == requiredSkillList.size()) {</div><div><span class="" style="white-space:pre">                                        </span>hardScore += 1;</div><div><span class="" style="white-space:pre">                                </span>}</div>
<div><span class="" style="white-space:pre">                        </span>}</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/2/20 André Fróes <span dir="ltr">&lt;<a href="mailto:arfmoraes@gmail.com" target="_blank">arfmoraes@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">After some workaround I noticed that the workorders are not being 100% corretly distributed to, i&#39;ve changed the scorecalculator to this:<div>
<br></div><div><div><span style="white-space:pre-wrap">                        </span>int commonSkillCount = 0;</div>
<div><span style="white-space:pre-wrap">                        </span>for (Skill s : requiredSkillList){</div><div><span style="white-space:pre-wrap">                                </span>for (SkillEngineer se : e.getSkillEngineerList()){</div><div class="im"><div><span style="white-space:pre-wrap">                                        </span>if (se.getSkill().getId() == s.getId()){</div>

<div><span style="white-space:pre-wrap">                                                </span>commonSkillCount++;</div><div><span style="white-space:pre-wrap">                                        </span>}</div><div><span style="white-space:pre-wrap">                                </span>}</div><div><span style="white-space:pre-wrap">                        </span>}</div>

</div></div><div><br></div><div><div><span style="white-space:pre-wrap">                        </span>if ((commonSkillCount - e.getSkillEngineerList().size()) &lt;= 0){</div><div><span style="white-space:pre-wrap">                                </span>hardScore += commonSkillCount;</div>

<div><span style="white-space:pre-wrap">                        </span>}</div></div><div><br></div><div>and I got the result</div><div><br></div><div><div>ID: 104[Skills: ABC 2,]   -   Trewq(8)[Skills: ABC 3,ABC 2,] ------ Feasible(0)</div>
<div>ID: 103[Skills: ABC 3,]   -   Trewq(8)[Skills: ABC 3,ABC 2,] ------ Feasible(0)</div><div>ID: 105[Skills: ABC 4,ABC 3,]   -   Poiuy(8)[Skills: ABC 1,ABC 2,ABC 3,ABC 4,] ------ Feasible(0)</div><div>ID: 102[Skills: ABC 2,ABC 1,ABC 4,]   -   Qwert(8)[Skills: ABC 2,ABC 4,] ------ Broken(1)</div>

<div>ID: 101[Skills: ABC 1,]   -   Lkjhg(8)[Skills: ABC 4,ABC 1,] ------ Feasible(0)</div><div>ID: 107[Skills: ABC 4,]   -   Lkjhg(8)[Skills: ABC 4,ABC 1,] ------ Feasible(0)</div><div>ID: 106[Skills: ABC 1,]   -   Qwert(8)[Skills: ABC 2,ABC 4,] ------ Broken(1)</div>

<div>ID: 108[Skills: ABC 3,ABC 2,]   -   Poiuy(8)[Skills: ABC 1,ABC 2,ABC 3,ABC 4,] ------ Feasible(0)</div><div><br></div><div>there&#39;s a workorder that woud be disconsidered because no engineer have the required skill to complete it</div>

</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">2013/2/19 André Fróes <span dir="ltr">&lt;<a href="mailto:arfmoraes@gmail.com" target="_blank">arfmoraes@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">I forgot to post the code:<div><br></div><div><div><div><span style="white-space:pre-wrap">        </span>public HardAndSoftScore calculateScore(Distributor distributor) {</div><div><span style="white-space:pre-wrap">                </span>int hardScore = 0;</div>


<div><span style="white-space:pre-wrap">                </span>int softScore = 0;</div><div><span style="white-space:pre-wrap">                </span></div><div><span style="white-space:pre-wrap">                </span>for (Engineer e : distributor.getEngineerList()){</div>


<div><span style="white-space:pre-wrap">                        </span>long skill = e.getSkillEngineerList().get(0).getSkill().getId();</div><div><span style="white-space:pre-wrap">                        </span>int requiredWorktime = 0;</div></div><div><span style="white-space:pre-wrap">                        </span>List&lt;Skill&gt; requiredSkillList = new ArrayList&lt;Skill&gt;();</div>

<div>
<div><span style="white-space:pre-wrap">                        </span></div><div><span style="white-space:pre-wrap">                        </span></div><div><span style="white-space:pre-wrap">                        </span>for (WorkOrder o : distributor.getWorkOrderList()){</div>
<div><span style="white-space:pre-wrap">                                </span>if (e.equals(o.getEngineer())){</div><div><span style="white-space:pre-wrap">                                        </span>requiredWorktime += o.getRequiredWorktime();</div></div><div><span style="white-space:pre-wrap">                                        </span>for (SkillWorkOrder swo : o.getRequiredSkills()){</div>


<div><span style="white-space:pre-wrap">                                                </span>requiredSkillList.add(swo.getSkill());</div><div><div><span style="white-space:pre-wrap">                                        </span>}</div><div><span style="white-space:pre-wrap">                                </span>}</div>

<div><span style="white-space:pre-wrap">                        </span>}</div><div><span style="white-space:pre-wrap">                        </span></div><div><span style="white-space:pre-wrap">                        </span>int engineerAvailableTime = e.getWorktime() - requiredWorktime;</div>


<div><span style="white-space:pre-wrap">                        </span>if (engineerAvailableTime &lt; 0 ){</div><div><span style="white-space:pre-wrap">                                </span>hardScore += engineerAvailableTime;</div><div><span style="white-space:pre-wrap">                        </span>}</div>


<div><span style="white-space:pre-wrap">                        </span></div></div><div><span style="white-space:pre-wrap">                        </span>int commonSkillCount = 0;</div><div><span style="white-space:pre-wrap">                        </span>for (SkillEngineer se : e.getSkillEngineerList()){</div>


<div><span style="white-space:pre-wrap">                                </span>for (Skill s : requiredSkillList){</div><div><span style="white-space:pre-wrap">                                        </span>if (se.getSkill().getId() == s.getId()){</div><div><span style="white-space:pre-wrap">                                                </span>commonSkillCount++;</div>


<div><span style="white-space:pre-wrap">                                        </span>}</div><div><span style="white-space:pre-wrap">                                </span>}</div><div><span style="white-space:pre-wrap">                        </span>}</div><div><span style="white-space:pre-wrap">                        </span></div>


<div><span style="white-space:pre-wrap">                        </span>if (commonSkillCount != 0){</div><div><span style="white-space:pre-wrap">                                </span>hardScore += commonSkillCount;</div><div><span style="white-space:pre-wrap">                        </span>}</div>


<div><span style="white-space:pre-wrap">                        </span></div><div><span style="white-space:pre-wrap">                </span>}</div><div><br></div><div><span style="white-space:pre-wrap">                </span>return DefaultHardAndSoftScore.valueOf(hardScore, softScore);</div>


<div><span style="white-space:pre-wrap">        </span>}</div></div><div><br></div><div>( but i still want to try to create this in dsl rule after this work :D )</div></div><div><div><div class="gmail_extra">
<br><br><div class="gmail_quote">
2013/2/19 André Fróes <span dir="ltr">&lt;<a href="mailto:arfmoraes@gmail.com" target="_blank">arfmoraes@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div dir="ltr">I managed solving that problem even when there&#39;s more than one skill involved, but now my hard constraint of worktime breaks if I add more worktime than the sum of engineers worktime.<div><br></div><div>



(8) is the worktime, my workorders all have a worktime of 4 hours, so, I got 32 available hours and 32 hours of workorders to be assigned right? When I stick to this plan, it works:</div><div><br></div><div>----Compilation Result----</div>



<div><div>Solved distribution with 8 work orders and 4 engineers:</div><div>  ID: 104[Skills: (1002) ABC 2]  -  Qwert(8)[Skills: (1002) ABC 2]</div><div>  ID: 103[Skills: (1003) ABC 3]  -  Trewq(8)[Skills: (1003) ABC 3]</div>



<div>  ID: 105[Skills: (1004) ABC 4]  -  Lkjhg(8)[Skills: (1004) ABC 4]</div><div>  ID: 102[Skills: (1002) ABC 2]  -  Qwert(8)[Skills: (1002) ABC 2]</div><div>  ID: 101[Skills: (1001) ABC 1]  -  Poiuy(8)[Skills: (1001) ABC 1]</div>



<div>  ID: 107[Skills: (1004) ABC 4]  -  Lkjhg(8)[Skills: (1004) ABC 4]</div><div>  ID: 106[Skills: (1001) ABC 1]  -  Poiuy(8)[Skills: (1001) ABC 1]</div><div>  ID: 108[Skills: (1003) ABC 3]  -  Trewq(8)[Skills: (1003) ABC 3]</div>



<div>---------------</div><div><br></div><div>So, if I add another worktime with 4 hours, it messes everything, this is the outcome:</div><div><br></div><div><div>Solved distribution with 9 work orders and 4 engineers:</div>



<div>  ID: 104[Skills: (1002) ABC 2]  -  Qwert(8)[Skills: (1002) ABC 2]</div><div>  ID: 103[Skills: (1003) ABC 3]  -  Trewq(8)[Skills: (1003) ABC 3]</div><div>  ID: 105[Skills: (1004) ABC 4]  -  Lkjhg(8)[Skills: (1004) ABC 4]</div>



<div>  ID: 102[Skills: (1002) ABC 2]  -  Qwert(8)[Skills: (1002) ABC 2]</div><div>  ID: 101[Skills: (1001) ABC 1]  -  Poiuy(8)[Skills: (1001) ABC 1]</div><div>  ID: 107[Skills: (1004) ABC 4]  -  Lkjhg(8)[Skills: (1004) ABC 4]</div>



<div>  ID: 106[Skills: (1001) ABC 1]  -  Poiuy(8)[Skills: (1001) ABC 1]</div><div>  ID: 108[Skills: (1003) ABC 3]  -  Trewq(8)[Skills: (1003) ABC 3]</div><div>  ID: 109[Skills: (1003) ABC 3]  -  Trewq(8)[Skills: (1003) ABC 3]</div>



<div><br></div><div>------------</div><div><br></div><div>to be precise, i don&#39;t know if it is because of worktime or skill</div></div></div></div><div><div><div class="gmail_extra"><br><br>
<div class="gmail_quote">2013/2/19 André Fróes <span dir="ltr">&lt;<a href="mailto:arfmoraes@gmail.com" target="_blank">arfmoraes@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Just one correction, it is sorting correctly when there&#39;s one workorder with a skill, if there&#39;s another workorder with same skill, it doesn&#39;t sort that workorder to that skill.<div>



<br><div>
This is what is happening:</div><div><br></div><div>Workorder skill ABC1   ------------   Engineer skill ABC1</div><div>Workorder skill ABC2   ------------   Engineer skill ABC2<br></div><div>Workorder skill ABC1   ------------   Engineer skill ABC2<br>




</div></div><div><br></div><div>but if there&#39;s only one workorder with one skill it works:</div><div><br></div><div><div>Workorder skill ABC1   ------------   Engineer skill ABC1</div><div>Workorder skill ABC2   ------------   Engineer skill ABC2<br>




</div><div>Workorder skill ABC3   ------------   Engineer skill ABC3</div><div><br></div><div>so, from the second workorder on, with a repeated required skill, it doesn&#39;t sort properly</div></div></div><div>
<div><div class="gmail_extra">
<br><br><div class="gmail_quote">2013/2/19 André Fróes <span dir="ltr">&lt;<a href="mailto:arfmoraes@gmail.com" target="_blank">arfmoraes@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div dir="ltr">Hello, since i&#39;m not moving a step from where I am at dsl rule, I&#39;m trying to do it with SimpleScoreCalculator, but the same is happening.<div><br></div><div>------------</div><div><div>public HardAndSoftScore calculateScore(Distributor distributor) {</div>





<div><span style="white-space:pre-wrap">                </span>int hardScore = 0;</div><div><span style="white-space:pre-wrap">                </span>int softScore = 0;</div><div><span style="white-space:pre-wrap">                </span></div><div><span style="white-space:pre-wrap">                </span>for (Engineer e : distributor.getEngineerList()){</div>





<div><span style="white-space:pre-wrap">                        </span>long skill = e.getSkillEngineerList().get(0).getSkill().getId();</div><div><span style="white-space:pre-wrap">                        </span>int requiredWorktime = 0;</div><div><span style="white-space:pre-wrap">                        </span>long requiredSkill = 0l;</div>





<div><span style="white-space:pre-wrap">                        </span></div><div><span style="white-space:pre-wrap">                        </span></div><div><span style="white-space:pre-wrap">                        </span>for (WorkOrder o : distributor.getWorkOrderList()){</div>
<div><span style="white-space:pre-wrap">                                </span>if (e.equals(o.getEngineer())){</div><div><span style="white-space:pre-wrap">                                        </span>requiredWorktime += o.getRequiredWorktime();</div><div><span style="white-space:pre-wrap">                                        </span>requiredSkill = o.getRequiredSkills().get(0).getSkill().getId();</div>





<div><span style="white-space:pre-wrap">                                </span>}</div><div><span style="white-space:pre-wrap">                        </span>}</div><div><span style="white-space:pre-wrap">                        </span></div><div><span style="white-space:pre-wrap">                        </span></div>





<div><span style="white-space:pre-wrap">                        </span>int engineerAvailableTime = e.getWorktime() - requiredWorktime;</div><div><span style="white-space:pre-wrap">                        </span>if (engineerAvailableTime &lt; 0 ){</div><div>
<span style="white-space:pre-wrap">                                </span>hardScore += engineerAvailableTime;</div><div><span style="white-space:pre-wrap">                        </span>}</div><div><span style="white-space:pre-wrap">                        </span></div><div><span style="white-space:pre-wrap">                        </span>if (requiredSkill == skill){</div>





<div><span style="white-space:pre-wrap">                                </span>softScore += requiredSkill;</div><div><span style="white-space:pre-wrap">                        </span>}</div><div><span style="white-space:pre-wrap">                </span>}</div><div><span style="white-space:pre-wrap">                </span>return DefaultHardAndSoftScore.valueOf(hardScore, softScore);</div>





<div><span style="white-space:pre-wrap">        </span>}</div></div><div>------------</div><div><br></div><div>wouldn&#39;t that have to fit since i&#39;m comparing the 1st attribute of each skill list from engineers and workorders? And how can I weight which engineer would be better to a determined workorder if the workorder have more skills and so does the engineer?</div>





</div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>