بتاريخ: 2 مايو 200619 سنة comment_67991 السلام عليكم اخواني ..عندي سؤال واتمنى الاجابه عليه اريد معرفه كيفيه حساب اجازات الموظفين بحيث لا يسمح بااعطاء الموظف اجازة اذا لم يتمم سنه من تاريخ توظيفه بحيث يتم التشييك على حقل بداية التوظيف ونهايتة ويتم حساب اذا كان الموظف يعمل منذ سنه اولا ويعطى اجازة اذا اتمم سنه او اكثر ولا يعطى اجازه اذا لم يتمم سنه اتمنى فهمتم قصدي وجزيتم خيرا ,,هذا الكود ولكن لم افمهمه var.butflag:=1; declare yyyy varchar2(4); mm varchar2(3); dd varchar2(2); begin yyyy:=to_char(sysdate,'yyyy'); mm:=to_char(:sdate,'mon'); dd:=to_char(:sdate,'dd'); :nextyear:=to_date(dd||mm||yyyy); var.newyear:=:nextyear; end; if :vac_start_date>var.newyear and :vac_start_date<var.newyear+365 then :nextyear:=:nextyear+365; var.newyear:=:nextyear; -- elsif :vac_start_date>var.newyear and :vac_start_date>var.newyear+365 then :nextyear:=:nextyear+(365*2); var.newyear:=:nextyear; end if; ------------(ANNUAL)---------------- if :vac_type='ANNUAL' then declare vsd date; begin select vac_start_date into vsd from vacation where vac_type='ANNUAL' and vacation.emp_num=:VACATION.EMP_NUM and vac_start_date<:nextyear and vac_start_date>:nextyear-365; if :vac_start_date is null or :vacation.vac_start_date>:nextyear then :days_num:=30; ---- -- elsif :vac_start_date is not null then SHOW_VIEW('stack'); if show_alert('ANNUALalert2')=alert_button1 then if var.newyear<:edate then :days_num:=null; :vac_start_date:=null; go_item('vacation.vac_start_date'); var.flag:=1; raise form_trigger_failure; end if; end if; end if; -- exception when no_data_found then :days_num:=30; end; end if;----------------- if :vac_type='ANNUAL' and :vac_start_date-:sdate<=365 and :vac_start_date-:sdate>=0 then if show_alert('ANNUALalert')=alert_button1 then :days_num:=null; :vac_start_date:=null; SHOW_VIEW('stack'); GO_ITEM('VAC_START_DATE'); var.flag:=1; raise form_trigger_failure; end if; end if; ------------(EARGENT)-------------------if :vac_Type='EARGENT' THEN DECLARE DAYSTOTNUM NUMBER(2); BEGIN SELECT SUM(DAYS_NUM) INTO DAYSTOTNUM FROM VACATION WHERE vac_Type='EARGENT' AND vacation.emp_num=:VACATION.EMP_NUM AND VAC_START_DATE>:NEXTYEAR; IF (DAYSTOTNUM=0 AND :remain_days=0)or :remain_days=0 then :remain_days:=6; END IF; END; END IF; ---------------(EXCEPTIONAL)--------------------- if :vac_Type='EXEPTIONAL' THEN DECLARE DAYSTOTNUM NUMBER(2); BEGIN SELECT SUM(DAYS_NUM) INTO DAYSTOTNUM FROM VACATION WHERE vac_Type='EXEPTIONAL' AND vacation.emp_num=:VACATION.EMP_NUM AND VAC_START_DATE>:NEXTYEAR; IF (DAYSTOTNUM=0 AND :remain_days=0)or :remain_days=0 then :remain_days:=45; End if; END; END IF; ----------------(SICK)----------------------------------- if :vac_Type='SICK' THEN DECLARE DAYSTOTNUM NUMBER(2); BEGIN SELECT SUM(DAYS_NUM) INTO DAYSTOTNUM FROM VACATION WHERE vac_Type='EXEPTIONAL' AND vacation.emp_num=:VACATION.EMP_NUM AND VAC_START_DATE>:NEXTYEAR; IF (DAYSTOTNUM=0 AND :remain_days=0)or :remain_days=0 then :remain_days:=90; END IF; END; END IF; ---------------------------------------------------------- begin if :vac_type='EARGENT' and var.eflag<>1 THEN --first time VAR.eflag:=1; END IF; exception when no_data_found then VAR.eflag:=1; end; -------------------------------(SICK)-----------------------------------declare beginif :vac_type='SICK' and var.SICKflag<>1 THEN --first time VAR.SICKflag:=1;elsif :vac_type='SICK' and var.SICKflag=1 and :vac_start_date<:nextyear then --thany marraDECLARE SUMDAYSNUM NUMBER(4);BEGINSELECT SUM(DAYS_NUM)INTO SUMDAYSNUMFROM VACATIONWHERE vacation.emp_num=:VACATION.EMP_NUM andvac_type='SICK' and (:VAC_START_DATE<:nextYEAR AND :VAC_START_DATE>:nextYEAR-365);IF SUMDAYSNUM>90 THEN if show_alert('SICK90DAYS')=alert_button1 then set_item_property('hide',enabled,property_true); set_item_property('hide',visible,property_true); show_view('STACK'); go_item('vacation.vac_start_date'); var.flag:=1; raise form_trigger_failure; end if; ELSIF SUMDAYSNUM<90 THEN NULL; END IF; END; -- elsif :vac_type='SICK' and var.SICKflag=1 and :vac_start_date>:nextyear then VAR.SICKflag:=1; end if; exception when no_data_found then VAR.SICKflag:=1; end;-- END IF;----------********************************----------------------------if :vac_start_date is null then if show_alert('vsd')=alert_button1 then go_item('vac_start_date'); raise form_trigger_failure; end if; end if;--if :vac_start_date=:sdate then if show_alert('FIRSTDAY')=alert_button1 then set_item_property('remain_days',VISIBLE,property_false); set_item_property('days_num',VISIBLE,property_false);go_item('vac_start_date');var.flag:=1; raise form_trigger_failure; end if;end if;---/*if :vac_start_date>:edate then if show_alert('invaliddate')=alert_button1 then raise form_trigger_failure;-- end if;end if;---elsif :vac_start_date<:sdate then if show_alert('didntstart')=alert_button1 then raise form_trigger_failure; end if;end if;*/--- if :vac_start_date<:sdate then if show_alert('consd')=alert_BUTTON1 THEN var.flag:=1; END IF; :days_num:=null; RAISE FORM_TRIGGER_FAILURE; --- elsif :vac_start_Date>:edate then if show_alert('coned')=alert_BUTTON1 THENvar.flag:=1; END IF; :days_num:=null; RAISE FORM_TRIGGER_FAILURE; end if; ------------- if var.flag<>1 then if show_alert('DATECHECKED')=alert_button1 then null; end if; end if; ---- if :vac_start_date>sysdate+180 then if show_alert('vsd1')=alert_button1 then null; end if; end if;--end if; تقديم بلاغ
بتاريخ: 2 مايو 200619 سنة comment_67998 اختي الكريمةالاجازة كما هو معروف لدينا انواع 1-ANNUAL اجازة سنوية وفي هذه الحالة مطبق عندك هذه الفانكشن حيث يقوم بحساب التاريخ وهل يستحق الاجازة ام لا2-EARGENT الاجازة الاضطرارية وهنا يفحص كم يوم يستحق هذا الموظف وعادة يعطيه 6 ايام كما هو مبين من الكود3-EXCEPTIONAL اجازة استثنائية ومدتها 45 يوما4-SICK وهي الاجازة المرضية ومدتها 90 يوماذا يتم الحساب في الكود المرفق حسب حالة الاجازة ويتم فحص كل كود بحيث يتم فحص عدد ايام الاجازة المطلوبة ومقارنتها بعدد الايام المسموح بهاوطبعا موجود لكل موظف الايام المستحقة للأجازة من اخر يوم جاء به من اجازته السابقة ويتم حسابها كل شهر مع احتساب الرواتب حيث يقسم عدد ايام التي داوم بها الموظف على 12 شهر وهي عادة تكون 2.5 يوم عن كل شهرهذا هو المفهوم العام للأجازاتوالكود واضح باعتقادي وممكن ان تحددي النقاط الغير واضحة او المفاهيم ليتم شرحها وبالتوفيق تقديم بلاغ
بتاريخ: 13 مايو 200619 سنة كاتب الموضوع comment_69036 جزاك الله خيرا اخي اسامة على التفاعللكن انا عندي 4 حقول بجدول الـvacations الحقل الاول لبداية التوظيف start employment والثاني لنهاية التوظيف end employmentالثالث لبداية الاجازةstart vacationsويختارها من Calender والاخر لنهاية الاجازةend vacation وبنفس الفكرةاريدان يشيك عندما اختار تاريخ بدايه التوظيف ونهايتة اذا اتمم سنة او لا واذا اتمم سنه يقوم بقبول اجازتةاريد الكود الذي يقوم بالتشييك على بداية التوظيف ونهايتة وجزاك الله خيرا تقديم بلاغ
بتاريخ: 13 مايو 200619 سنة comment_69041 اختي الكريمةللحل يمكنك اضافة هذا الكود .... declare diff_date number; begin diff_date:= to_date(:end_employment)- to_date(:start_employment ); if diff_date<365 then message('the result of diff ...'); end if; end; تقديم بلاغ
بتاريخ: 13 مايو 200619 سنة كاتب الموضوع comment_69140 اشكرك اخي على تعاونك وسوف اقوم بتجربتهجزاك الله خيرا تقديم بلاغ
بتاريخ: 7 أكتوبر 200619 سنة comment_80300 السلام عليكم ورحمت الله وبركاتةارجو منكم وضع النظام او الشاشات والجداول على المنتدى للاستفادة منه لاني لم افهم من الكود اي شي لانني اريد الاستفادة منة في مشروعي وقد تاخرت واريد منكم الرد في اسرع وقت ممكنوجزاكم الله خير وجعلة الله في ميزان حسناتكم[email protected] تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.