الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

سؤال عن اجازات الموظفين

Featured Replies

بتاريخ:

السلام عليكم اخواني ..

عندي سؤال واتمنى الاجابه عليه


اريد معرفه كيفيه حساب اجازات الموظفين بحيث لا يسمح بااعطاء الموظف اجازة اذا لم يتمم سنه من تاريخ توظيفه بحيث يتم التشييك على حقل بداية التوظيف ونهايتة ويتم حساب اذا كان الموظف يعمل منذ سنه اولا ويعطى اجازة اذا اتمم سنه او اكثر ولا يعطى اجازه اذا لم يتمم سنه
اتمنى فهمتم قصدي

وجزيتم خيرا ,,

هذا الكود ولكن لم افمهمه




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
begin
if :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 marra
DECLARE
SUMDAYSNUM NUMBER(4);
BEGIN
SELECT SUM(DAYS_NUM)
INTO SUMDAYSNUM
FROM VACATION
WHERE vacation.emp_num=:VACATION.EMP_NUM and
vac_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 THEN
var.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;
بتاريخ:

اختي الكريمة
الاجازة كما هو معروف لدينا انواع
1-ANNUAL اجازة سنوية وفي هذه الحالة مطبق عندك هذه الفانكشن حيث يقوم بحساب التاريخ وهل يستحق الاجازة ام لا
2-EARGENT الاجازة الاضطرارية وهنا يفحص كم يوم يستحق هذا الموظف وعادة يعطيه 6 ايام كما هو مبين من الكود
3-EXCEPTIONAL اجازة استثنائية ومدتها 45 يوما
4-SICK وهي الاجازة المرضية ومدتها 90 يوم

اذا يتم الحساب في الكود المرفق حسب حالة الاجازة ويتم فحص كل كود بحيث يتم فحص عدد ايام الاجازة المطلوبة ومقارنتها بعدد الايام المسموح بها

وطبعا موجود لكل موظف الايام المستحقة للأجازة من اخر يوم جاء به من اجازته السابقة ويتم حسابها كل شهر مع احتساب الرواتب حيث يقسم عدد ايام التي داوم بها الموظف على 12 شهر وهي عادة تكون 2.5 يوم عن كل شهر
هذا هو المفهوم العام للأجازات




والكود واضح باعتقادي وممكن ان تحددي النقاط الغير واضحة او المفاهيم ليتم شرحها
وبالتوفيق

  • بعد 2 أسابيع...
بتاريخ:
  • كاتب الموضوع

جزاك الله خيرا اخي اسامة على التفاعل


لكن انا عندي 4 حقول بجدول الـvacations الحقل الاول لبداية التوظيف start employment والثاني لنهاية التوظيف end employment
الثالث لبداية الاجازةstart vacationsويختارها من Calender والاخر لنهاية الاجازةend vacation وبنفس الفكرة

اريدان يشيك عندما اختار تاريخ بدايه التوظيف ونهايتة اذا اتمم سنة او لا

واذا اتمم سنه يقوم بقبول اجازتة

اريد الكود الذي يقوم بالتشييك على بداية التوظيف ونهايتة

وجزاك الله خيرا

بتاريخ:

اختي الكريمة
للحل يمكنك اضافة هذا الكود ....

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;

بتاريخ:
  • كاتب الموضوع

اشكرك اخي على تعاونك وسوف اقوم بتجربته


جزاك الله خيرا

  • بعد 4 شهور...
بتاريخ:

السلام عليكم ورحمت الله وبركاتة
ارجو منكم وضع النظام او الشاشات والجداول على المنتدى للاستفادة منه
لاني لم افهم من الكود اي شي
لانني اريد الاستفادة منة في مشروعي وقد تاخرت
واريد منكم الرد في اسرع وقت ممكن
وجزاكم الله خير وجعلة الله في ميزان حسناتكم

[email protected]

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.