Beispiel #1
0
 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);
 }
Beispiel #2
0
 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);
         }
     }
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 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;
 }