import "layer92.dll"

OpenRowVP_UV(DateUv, DateNr,dn47,pr47)
{
   string UVL_CNF_TABLE="увольн";
   var DateVP = (!GetCommonCnfInt("DATE_VP",UVL_CNF_TABLE)) ? DateUv : DateNr;
   if ( !(GetVerInfo() & V_UVD) )
   {
   	if(otkrsnu(47.,DateVP.GetDouble(),DateVP.GetDouble(),pr47," ",0)==EOF)  // 20.03.95
   		return(ESC);
   	s50all(DateVP.GetAbs());
   }
   else
   /* uvd ( */
   {
   	double datamm;
   	int kod_sl=kch_from_int("attest"); /* 1-аттестованный, 0-вольнонаемный */

   	if (kod_sl==1) datamm=DateUv.GetDouble();
   	else           datamm=DateVP.GetDouble();
   	if ( otkrsnu(47.,datamm,datamm,pr47," ",0)==EOF ) return(ESC);
   	if (kod_sl==1) s50all(DateUv.GetAbs());
   	else           s50all(DateVP.GetAbs());
   }
   /* ) */
   int row=countkod-1;
   PutTime(row,colc2,dn47);
   PutCashMonth(row,colc2,mtek);
   s50all(mtek);
   return 0;
}

PanelUvl(&sDateUv,&sDateNr,&dn47,&pr47,&CountDayKO,&ColKOUvl,&KOGosslug,&FlagLg,&ArrayParams)
{
   string OTPUSK_CNF_TABLE = "отпуск",
          UVL_CNF_TABLE = "увольн";

   string StrD0 = Str_Date_0;
   var DateUv = CreateObject("KDate");
   DateUv.SetDate(static_cast_to_string(sDateUv));
   if ( DateUv.IsEqI(INVALID_DATE_VALUE) )
      DateUv.SetDateD(data+0.01);
  	char StrMin[21];
  	GetKchValue("kmin",StrMin,20,DateUv);

  	int FlagShowK = (flagreg("От")==1) ? 1 : 0,
  		 FlagShowP = (flagreg("Вы")==1) ? 1 : 0,
  		 FlagShowLg= (atoi(StrMin)>0)   ? 1 : 0;

  	string RemarkForVP = "Дней выходного пособия:";
  	int FlagShowTypeOtp = 1;

  	/*---- uvd ( */
  	if ( GetVerInfo() & V_UVD )
  	{
  		// Для аттестованных обнуляем процент и вообще его не запрашиваем
  		/* 1-аттестованный, 0-вольнонаемный */
  		if (kch_from_int("attest")==0) pr47=100.;
  		else
  		{
  			RemarkForVP = "Месяцев вых.пособия:";
  			FlagShowLg=0;
  			pr47=0.;
  			FlagShowTypeOtp=0;
  		}
  	}
  	/*---- uvd ) */

  	string Heading=" Параметры расчета увольнения ";

  	long ID_Combine = GetCommonProp(CMN_SRC_INT_LS).GetCombine();
  	if ( ID_Combine!=CLL_TOTAL_COMBINE )
  	{

  		char Str[81];
  		Str[0]=0;
      var CL=CreateObject("CombineList");

  		if ( CL.Find(ID_Combine) )
  			sprintf(Str,"(%3.3s - %-.25s)",IntCombineToExt(ID_Combine),CL.GetName(ID_Combine));
  		FreeSpaceString(Str,2,"");
  		Heading+=Str;
  	}
  	int Half_Len_Heading=MIN(60,strlen(Heading))/2;

  	sprintf(Str_Date_0,"%.10s",DateUv.GetStr());
  	char Insert00[1];
  	char Access00[1];
   var Text00[1];
   MakeReferenceVar(Text00[0],Str_Date_0);
   Insert00[0]=Access00[0]=' ';

  	char StrCountDayK[11];
  	Double_Text(StrCountDayK,CountDayKO,2,7);
  	char Insert01[1];
  	char Access01[1];
   var Text01[1];
   MakeReferenceVar(Text01[0],StrCountDayK);
   Insert01[0]=Access01[0]=' ';

  	char StrCol[11];
  	string Shab_Fld_Plus;
  	Shab_Fld_Plus="    ";
  	Long_Text(StrCol,ColKOUvl+1,4);
  	char InsertCol[1];
  	char AccessCol[1];
   var TextCol[1];
   MakeReferenceVar(TextCol[0],StrCol);
   InsertCol[0]=AccessCol[0]=' ';

  	char StrCountDayP[11];
  	Double_Text(StrCountDayP,dn47,2,7);
  	char Insert02[1];
  	char Access02[1];
   var Text02[1];
   MakeReferenceVar(Text02[0],StrCountDayP);
   Insert02[0]=Access02[0]=' ';

  	char StrProcP[7];
  	Double_Text(StrProcP,pr47,2,6);
  	char Insert03[1];
  	char Access03[1];
   var Text03[1];
   MakeReferenceVar(Text03[0],StrProcP);
   Insert03[0]=Access03[0]=' ';

  	char Insert04[1];
  	char Access04[1];
  	string Text04="Предоставлять льготы по п/налогу за месяц увольнения";
   Insert04[0]=Access04[0]=' ';
  	if ( FlagLg ) Insert04[0]='\0';

  	char Insert05[1];
  	char Access05[1];
  	string Text05="Расчет для госслужащих";
  	KOGosslug = 0;
  	int KodGS = GetKodGosSlug();
  	bool bShowGS = KodGS==2;
   Insert05[0]=Access05[0]=' ';

  	char InsertStart[1];
  	char AccessStart[1];
  	string TextStart=" Начать ";
   InsertStart[0]='\0';
   AccessStart[0]=' ';

  	char TypeOtp1[3];
  	int TOtp=GetCommonCnfInt("TIP_OTP",OTPUSK_CNF_TABLE);
  	char str[81];
  	//--- проверка индивидуального типа расчета отпуска для ЛС
  	if (kch_from("tipr_otp",str)!=ESC)
  	{
  		int i=atoi(str);
  		if ( i ) TOtp=i;
  		if ( TOtp==10 ) TOtp=0;  // i=10 = типу расчета 0
  	}
  	sprintf(TypeOtp1,"%2d",TOtp);
  	char InsertDop[1];
  	char AccessDop[1];
   var TextDop[1];
   MakeReferenceVar(TextDop[0],TypeOtp1);
   InsertDop[0]=AccessDop[0]=' ';

  	int RowP = (FlagShowK) ? 6 : 4,
  		 RowLg = (FlagShowP) ? RowP+2 : RowP,
  		 RowSt = RowLg+2;
  	int FlagShowCol = GetCommonCnfInt("COL_KO",UVL_CNF_TABLE);

   var Elem[9];
   for ( int i=0; i<9; ++i)
      Elem[i]=CreateObject("KControlElement");

  	// Дата увольнения
  	Elem[0].Initial(19,2,10,1,10,1,0,0,0,E_EDIT_AREA,1,1,"Before_S",
  		             "Control_Date_Uvl","  .  .    ",Text00,Insert00,Access00);

  	// Число дней (часов) компенсации за неисп.отпуск
  	Elem[1].Initial(28,4,7,1,7,1,0,0,0,E_EDIT_AREA,1,FlagShowK,"Before_S",
  		"Control_Double_A","",Text01,Insert01, Access01);

  	// Способ расчета отпуска
  	Elem[2].Initial(56,4,2,1,2,1,0,0,0,E_EDIT_AREA,1,FlagShowTypeOtp,
  		"Before_S", "Control_Tip_Otp","  ",TextDop, InsertDop, AccessDop);

  	// столбец для расчета компенсации
  	Elem[3].Initial(71,4,4,1,4,1,0,0,0,E_EDIT_AREA,1,FlagShowCol,"Before_S", "Control_Col",
  		Shab_Fld_Plus,TextCol, InsertCol, AccessCol);
  	// Дней выходного пособия
  	Elem[4].Initial(28,RowP,8,1,8,1,0,0,0,E_EDIT_AREA,1,FlagShowP,"Before_S",
  		"Control_Double_A","",Text02, Insert02, Access02);

  	// Процент выходного пособия
  	Elem[5].Initial(67,RowP,6,1,6,1,0,0,0,E_EDIT_AREA,1,0,"Before_S",
  		"Control_Double_A","",Text03, Insert03, Access03);

  	// Предоставлять льготы по подоходному налогу
  	Elem[6].Initial(2,RowLg,52,1,56,1,0,0,999,E_CHECK_BOX,1,FlagShowLg,"Before_S",
  		"Control_S","",Text04, Insert04, Access04);

  	Elem[7].Initial(2,RowLg+1,52,1,56,1,0,0,999,E_CHECK_BOX,1,bShowGS,"Before_S",
  		"Control_S","",Text05, Insert05, Access05);

  	// "начать"
  	Elem[8].Initial(63,RowSt,9,1,9,1,1,0,88,0,1,1,"Before_S", "Control_S",
  		"",TextStart, InsertStart, AccessStart);

   var Head[7];
   for ( int i=0; i<7; ++i )
      Head[i]=CreateObject("KControlHeading");
  	Head[0].Initial(static_cast_to_string(Heading),38-Half_Len_Heading,0,38+Half_Len_Heading,0,1);
  	Head[1].Initial("Дaтa увольнения:",2,2,18,2,1 );
  	Head[2].Initial("Дней (часов) компенсации:",2,4,27,4,FlagShowK);
  	Head[3].Initial("Способ расчета:",40,4,54,4,(FlagShowK*FlagShowTypeOtp)?1:0);
  	Head[4].Initial("Столбец:",62,4,69,4,FlagShowK?1:0 );
  	Head[5].Initial(RemarkForVP,2,RowP,25,RowP,FlagShowP );
  	Head[6].Initial("Процент выплаты вых.пособия:",40,RowP,65,RowP,0);

  	if ( Panel(Elem,9,Head,7,2,6,78,RowSt+6+2,' ',5,"ControlPanelUvl",0,"") == ESC )
  	{
  		Str_Date_0=StrD0;
  		return ESC;
  	}

  	DateUv.SetDate(static_cast_to_string(Str_Date_0));
  	sDateUv = DateUv.GetStr();
  	Str_Date_0=StrD0;

  	DateUv.Inc();
  	sDateNr     = DateUv.GetStr();
  	DateUv.Dec();

  	CountDayKO = atof(StrCountDayK),
  	dn47       = atof(StrCountDayP),
  	pr47       = atof(StrProcP);
  	FlagLg = (Insert04[0]=='\0') ? 1 : 0;
  	KOGosslug = 0;

  	double Epsilon = 0.0000000001;
  	if ( nabs(CountDayKO)>Epsilon )
  	{
  		// Если делали запрос про госслужащих, то возможно надо изменить тип расчета "нормативного заработка"
  		if ( bShowGS && Insert05[0]!=' ' )
  			KOGosslug=1;

  		if ( CountDayKO<0. ) CountDayKO -= atoi(TypeOtp1)*100000.-Epsilon;
  		else                 CountDayKO += atoi(TypeOtp1)*100000.+Epsilon;
  		if ( FlagShowCol )
  			ColKOUvl = atoi(TextCol[0])-1;
  	}
  	return 0;
}

ControlPanelUvl(&Elem,&Head,Field)
{
   double dn47=atof(Elem[4].Text[0]),
          dnKO=atof(Elem[1].Text[0]);
   double Epsilon = 0.0000001;

   string UVL_CNF_TABLE = "увольн";
   int FlagShowCol = GetCommonCnfInt("COL_KO",UVL_CNF_TABLE);

   char StrMin[21];
   var Date=CreateObject("KDate");
   Date.SetDate(static_cast_to_string(Elem[0].Text[0]));
   GetKchValue("kmin",StrMin,20,Date);
   int FlagShowP      = ( nabs(dn47)>Epsilon ) ? 1 : 0,
       FlagShowTypeOtp= ( nabs(dnKO)>Epsilon ) ? 1 : 0,
       FlagShowLg= (atoi(StrMin)>0) ? 1 : 0;
   if ( !FlagShowTypeOtp )
      FlagShowCol = 0;

   /*---- uvd ( */
   if ( GetVerInfo() & V_UVD )
   {
      // Для аттестованных процент  не запрашиваем
      if (kch_from_int("attest")==1)   /* 1-аттестованный, 0-вольнонаемный */
      {
         FlagShowP = FlagShowLg = FlagShowTypeOtp = 0;
      }
   }
   /*---- uvd ) */

	int KodGS = GetKodGosSlug();
	int FlagShowGS = nabs(dnKO)>Epsilon && KodGS==2;
   Head[3].Flag_Out=Elem[2].Flag_Out=FlagShowTypeOtp;
   Head[4].Flag_Out=Elem[3].Flag_Out=FlagShowCol;
   Head[6].Flag_Out=Elem[5].Flag_Out=FlagShowP;
   Elem[6].Flag_Out=FlagShowLg;
	Elem[7].Flag_Out=FlagShowGS;
   return 0;
}
