public Discipline(DiscDescript a) { this.lk = a.lk; this.lz = a.lz; this.pz = a.pz; this.kks = a.kks; srs = new Tuple <int, int>(a.srs_percent.Item1, a.srs_percent.Item2); }
private void Raspredelit(DiscDescript cur_disc, decimal result, decimal razn, int NOT_LK) { if (result <= 1.5M || cur_disc[(int)fields.LK] == 0M) { cur_disc[NOT_LK] = result; } else { //Если отрицательная???Возможно?????Хуй razn -= result % 1M; cur_disc[NOT_LK] = 1 + result % 1M; cur_disc[(int)fields.LK] = 1; result -= result % 1M + 2; if (result <= razn) { cur_disc[NOT_LK] += result % 1M + result; } else { cur_disc[(int)fields.LK] += result / 2 - (((int)(razn + 0.5M)) / 2M); cur_disc[NOT_LK] += result / 2 + (((int)(razn + 0.5M)) / 2M); } } }
public DiscDescript Recalc(int line, int pole, decimal value, bool change) { Discipline cur_disc = disciplines[line]; DiscDescript disc = new DiscDescript(cur_disc); disc[pole] = value; //byte old_mask=disciplines[line].fixed_mask; decimal active_sum; if (pole != (int)fields.KKS) { active_sum = cur_disc.active - cur_disc[pole] + value; if (srs_inrange(active_sum, cur_disc.kks, cur_disc.srs)) { // MessageBox.Show("2"); } else { //MessageBox.Show(cur_disc[pole].ToString() + " " + value.ToString()); Tuple <decimal, decimal> result = search_in_kks(active_sum, cur_disc.kks, new Tuple <int, int>(cur_disc.srs_percent.Item1, cur_disc.srs_percent.Item2), cur_disc[pole] > value); //decimal result = find_in_kks(active_sum, cur_disc.kks, new Tuple<int, int>(cur_disc.srs_percent.Item1, cur_disc.srs_percent.Item2), cur_disc[pole] > value); if (result.Item2 != 0M) { if (active_sum != result.Item1) { int NOT_LK = cur_disc[(int)fields.LZ] >= cur_disc[(int)fields.PZ] ? (int)fields.LZ : (int)fields.PZ; decimal razn = cur_disc[NOT_LK] - cur_disc[(int)fields.LK]; Raspredelit(disc, result.Item1, razn, NOT_LK); disc.error = (byte)DisciplineWarnings.STEP_HOURS; } disc.kks = result.Item2; } else { disc.error = cur_disc[pole] < value ? (byte)DisciplineWarnings.MANY_HOURS : (byte)DisciplineWarnings.LITTLE_HOURS; } } } else { Tuple <decimal, decimal> result = search_in_hours(value, new Tuple <int, int>(cur_disc.srs_percent.Item1, cur_disc.srs_percent.Item2), cur_disc[pole] > value, true); active_sum = disc.active; if (result.Item2 != 0M) { int NOT_LK = disc[(int)fields.LZ] >= disc[(int)fields.PZ] ? (int)fields.LZ : (int)fields.PZ; decimal razn = disc[NOT_LK] - disc[(int)fields.LK]; if (result.Item2 != value) { disc.error = (byte)DisciplineWarnings.STEP_KKS; disc.kks = result.Item2; } Raspredelit(disc, result.Item1, razn, NOT_LK); } else { disc.error = cur_disc[pole] < value ? (byte)DisciplineWarnings.MANY_KKS : (byte)DisciplineWarnings.LITTLE_KKS; MessageBox.Show(disc.kks.ToString()); } } if (disc.error == 0 && change) { disciplines[line] = new Discipline(disc); } CalcHours(disc); return(disc); }
public void CalcHours(DiscDescript disc) { disc.active_hours = weeks * (disc.lk + disc.lz + disc.pz); disc.lazy_hours = disc.kks * hours_in_kred - disc.active_hours; disc.percent = (float)disc.lazy_hours / (float)(disc.active_hours + disc.lazy_hours) * 100; }