Files
sql-scripts/OCTPDBA-429 - end of year billing/Tasks in order to force the Invoice.sql
Thierry Schork 7cf858256a initial commit
2022-12-30 12:10:12 +01:00

190 lines
8.1 KiB
Transact-SQL
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
use arizona
;
/*=======================================================================
Galenica - End Of Year - Tasks in order to force the Invoice
STEP 01 - Déclaration des variables
STEP 02 - Création / suppression de la table PHOU historisée
STEP 03 - Remplissage de la table PHOU historisée
STEP 04 - Construction de la table de changements
STEP 05 - Application des changements
STEP 06 - Rétablissement des anciennes valeurs
=======================================================================*/
/*=======================================================================
STEP 01 - Déclaration des variables
=======================================================================*/
declare @force_delete int = 08,
@mode int = 1, /* 1 = Check | 2 = Just do IT !!! */
@cmdsql varchar(max),
@today datetime = getdate()
;
declare @day_delay table (
day_from      int,
day_to      int,
delivery_delay int,    
closing_mode   int)
;
/*=======================================================================
STEP 02 - Création / suppression de la table PHOU historisée
=======================================================================*/
if (EXISTS (select *
from arizonacust.INFORMATION_SCHEMA.TABLES
where TABLE_SCHEMA = 'dbo'
and TABLE_NAME = 'PH_Organizational_Unit_history'))
begin
if @force_delete = 1 begin
select @cmdsql = 'drop table arizonacust.dbo.PH_Organizational_Unit_history'
exec (@cmdsql)
end
end else begin
create table arizonacust.dbo.PH_Organizational_Unit_history (
PH_Organizational_Unit_history_id int identity (1,1),
phouh_year int,
phouh_PH_Organizational_Unit_guid uniqueidentifier,
phouh_PHOU_AB_delivery_delay smallint,
phouh_PHOU_AB_closing_mode smallint
)
end
/*=======================================================================
STEP 03 - Remplissage de la table PHOU historisée
=======================================================================*/
insert into arizonacust.dbo.PH_Organizational_Unit_history (
phouh_year,
phouh_PH_Organizational_Unit_guid,
phouh_PHOU_AB_delivery_delay,
phouh_PHOU_AB_closing_mode)
select year(@today),
PH_Organizational_Unit_guid,
PHOU_AB_delivery_delay,
PHOU_AB_closing_mode
from dbo.Organizational_Unit ou (nolock)  
join PH_Organizational_Unit P (nolock)  
on PHOU_Organizational_Unit = Organizational_Unit_Id 
join dbo.OU_store_history oush (nolock)
on oush.OU_store_history_GUID = (
select top 1 oush2.OU_store_history_GUID
from dbo.OU_store_history oush2 (nolock)
where isnull(oush2.OUSH_end_date,'2050-01-01') >= @today
and oush2.OUSH_organizational_unit = ou.Organizational_unit_ID
order by oush2.OUSH_start_date desc
)
join dbo.Address_criteria AC (nolock)  
on AC.ADCR_subsidiary = ou.OU_subsidiary  
and AC.ADCR_address = ou.OU_address  
join dbo.Criteria C (nolock)  
on C.Criteria_ID = AC.ADCR_criteria  
and C.CR_code = 'PROD'  
join dbo.Criteria_Type Ct (nolock)  
on Ct.Criteria_type_ID = C.CR_criteria_type  
and Ct.CRT_code = 'ENV'
where not exists (
select 1
from arizonacust.dbo.PH_Organizational_Unit_history p (nolock)
where p.phouh_year = year(@today)
and p.phouh_PH_Organizational_Unit_guid = PH_Organizational_Unit_guid
)
/*=======================================================================
STEP 04 - Construction de la table de changements
=======================================================================*/
/* 1. From December 12th to December 17th (included) set the Delivery_delay to 10 */
insert into @day_delay (day_from, day_to, delivery_delay,closing_mode)
select 12, 17, 10, 0
/* 2. From December 18th to December 24th (included) set the Delivery_delay to 5 */
insert into @day_delay (day_from, day_to, delivery_delay,closing_mode)
select 18, 24, 5, 0
/* 3. From December 25th to December 31th (included) set the Delivery_delay to 2 ClosingMode   */
insert into @day_delay (day_from, day_to, delivery_delay,closing_mode)
select 25, 30, 2, 1
/*=======================================================================
STEP 05 - Application des changements
=======================================================================*/
if @mode = 2 begin
update phou   
set phou.PHOU_AB_delivery_delay = case when d.delivery_delay <= phou.PHOU_AB_delivery_delay                                            
then d.delivery_delay 
else PHOU.PHOU_AB_delivery_delay 
end,
phou.PHOU_AB_closing_mode = case when phou.PHOU_AB_closing_mode = 1                                        
then PHOU.PHOU_AB_closing_mode                                         
else d.closing_mode                          
end 
from dbo.PH_organizational_unit PHOU (nolock)
join @day_delay d  
on day(@today) between d.day_from and d.day_to
and month(@today) = 12
where PHOU_AB_delivery_delay is not null
and (PHOU_AB_delivery_delay <> case when d.delivery_delay <= phou.PHOU_AB_delivery_delay                                            
then d.delivery_delay 
else PHOU.PHOU_AB_delivery_delay 
end
or phou.PHOU_AB_closing_mode <> case when phou.PHOU_AB_closing_mode = 1                                        
then PHOU.PHOU_AB_closing_mode                                         
else d.closing_mode                          
end)
end else begin
select phou.PH_organizational_unit_GUID,
phou.PHOU_AB_delivery_delay ,'-->', case when d.delivery_delay <= phou.PHOU_AB_delivery_delay                                            
then d.delivery_delay 
else PHOU.PHOU_AB_delivery_delay 
end,
phou.PHOU_AB_closing_mode ,'-->', case when phou.PHOU_AB_closing_mode = 1                                        
then PHOU.PHOU_AB_closing_mode                                         
else d.closing_mode                          
end  
from dbo.PH_organizational_unit PHOU (nolock)
join @day_delay d  
on day(@today) between d.day_from and d.day_to
and month(@today) = 12
where PHOU_AB_delivery_delay is not null
and (PHOU_AB_delivery_delay <> case when d.delivery_delay <= phou.PHOU_AB_delivery_delay                                            
then d.delivery_delay 
else PHOU.PHOU_AB_delivery_delay 
end
or phou.PHOU_AB_closing_mode <> case when phou.PHOU_AB_closing_mode = 1                                        
then PHOU.PHOU_AB_closing_mode                                         
else d.closing_mode                          
end  )
end
/*=======================================================================
STEP 06 - Rétablissement des anciennes valeurs
=======================================================================*/
if month(@today) = 12 and day(@today) = 31 begin
if @mode = 2 begin
update phou
set phou.PHOU_AB_delivery_delay = phouh.phouh_PHOU_AB_delivery_delay,
phou.PHOU_AB_closing_mode = phouh.phouh_PHOU_AB_closing_mode
from dbo.PH_organizational_unit phou (nolock)
join arizonacust.dbo.PH_organizational_unit_history phouh (nolock)  
on phouh.phouh_PH_Organizational_Unit_guid = phou.PH_organizational_unit_GUID
and phouh.phouh_year = year(@today)
end else begin
select phou.PHOU_AB_delivery_delay ,'-->', phouh.phouh_PHOU_AB_delivery_delay,
phou.PHOU_AB_closing_mode ,'-->', phouh.phouh_PHOU_AB_closing_mode
from dbo.PH_organizational_unit phou (nolock)
join arizonacust.dbo.PH_organizational_unit_history phouh (nolock)  
on phouh.phouh_PH_Organizational_Unit_guid = phou.PH_organizational_unit_GUID
and phouh.phouh_year = year(@today)
end
end