Procedura-AssetInvCardsByRestriction

Popis:
Procedura vybere karty majetku pro inventuru podle omezení

Parametry:

NázevPopisDatový typ
AAssetInv_IDChar(10)

Návratové hodnoty:

NázevPopisDatový typ
assetinv_idChar(10)
assetinvlist_idChar(10)
committee_idChar(10)
assetcard_typeInteger
assetcard_idChar(10)
iscollectionInteger
smallsubcard_idChar(10)
inventorynrVarChar(20)
nameVarChar(50)
eanVarChar(14)
responsible_idChar(10)
assetlocation_idChar(10)
evidencedivision_idChar(10)
expensesdivision_idChar(10)
quantityInteger

Tělo:

begin
  select a.docdate$date from assetinv a where (a.ID = :aassetinv_id) into :minvdate;

  for
    select
      a.id, a.committee_id
    from
      assetinvlists a
    where
      a.parent_id = :aassetinv_id
    into
      :assetinvlist_id, :committee_id
  do begin
    mincludedtypes = -1;
    mresponsibleids = 0;
    massetlocationids = 0;
    mevidencedivisionids = 0;
    mexpensesdivisionids = 0;
    for
      select
        a.includedassettypes,
        coalesce(a.responsible_id, '0000000000'),
        coalesce(a.assetlocation_id, '0000000000'),
        coalesce(a.evidencedivision_id, '0000000000'),
        coalesce(a.expensesdivision_id, '0000000000')
      from
        assetinvlistrestrictions a
      where
        a.parent_id = :assetinvlist_id
      into
      :mincludedtypes,
      :mresponsibleid,
      :massetlocationid,
      :mevidencedivisionid,
      :mexpensesdivisionid
    do begin
      if (mresponsibleid <> '0000000000') then
      begin
        mresponsibleids = 1;
      end
      if (massetlocationid <> '0000000000') then
      begin
        massetlocationids = 1;
      end
      if (mevidencedivisionid <> '0000000000') then
      begin
        mevidencedivisionids = 1;
      end
      if (mexpensesdivisionid <> '0000000000') then
      begin
        mexpensesdivisionids = 1;
      end
    end
    if (mincludedtypes in (0,1)) then
    begin
    /* Dlouhodoby majetek */
      assetinv_id = :aassetinv_id;
      smallsubcard_id = null;
      assetcard_type = 0;
      quantity = 1;
      for
        select
          ac.id id,
          ac.inventorynr inventorynr,
          cast(ac.name as varchar(50)) name,
          ac.ean ean,
          ac.responsible_id responsible_id,
          ac.assetlocation_id assetlocation_id,
          ac.evidencedivision_id evidencedivision_id,
          ac.expensesdivision_id expensesdivision_id,
          ac.iscollection iscollection
        from
          assetcards ac
        where
          (ac.status = 1) and
          (ac.purchasedate$date <= :minvdate) and
          (ac.fileindate$date <= :minvdate) and
          ((:mresponsibleids = 0) or ac.responsible_id in (select responsible_id from assetinvlistrestrictions where assetinvlistrestrictions.parent_id = :assetinvlist_id)) and
          ((:massetlocationids = 0) or ac.assetlocation_id in (select assetlocation_id from assetinvlistrestrictions where assetinvlistrestrictions.parent_id = :assetinvlist_id)) and
          ((:mevidencedivisionids = 0) or ac.evidencedivision_id in (select evidencedivision_id from assetinvlistrestrictions where assetinvlistrestrictions.parent_id = :assetinvlist_id)) and
          ((:mexpensesdivisionids = 0) or ac.expensesdivision_id in (select expensesdivision_id from assetinvlistrestrictions where assetinvlistrestrictions.parent_id = :assetinvlist_id))
         into
          :assetcard_id,
          :inventorynr,
          :name,
          :ean,
          :responsible_id,
          :assetlocation_id,
          :evidencedivision_id,
          :expensesdivision_id,
          :iscollection
      do begin
        suspend;
      end
    end

    if (mincludedtypes in (0,2)) then
    begin
      assetinv_id = :aassetinv_id;
      assetcard_type = 1;
      iscollection = 0;
      /* drobny rozpis */
      for
        select
          ac.id id,
          ac2.id smallsubcard_id,
          ac2.inventorynr inventorynr,
          cast(ac.name as varchar(50)) name,
          ac2.ean ean,
          ac2.responsible_id responsible_id,
          ac.assetlocation_id assetlocation_id,
          ac.evidencedivision_id evidencedivision_id,
          ac.expensesdivision_id expensesdivision_id,
          ac2.quantity quantity
        from
          smallassetcards2 ac2
          join smallassetcards ac on ac.id = ac2.parent_id
        where
          (ac.status = 0) and
          (ac.purchasedate$date <= :minvdate) and
          (ac.quantity > 1) and
          ((:mresponsibleids = 0) or ac2.responsible_id in (select responsible_id from assetinvlistrestrictions where assetinvlistrestrictions.parent_id = :assetinvlist_id)) and
          ((:massetlocationids = 0) or ac.assetlocation_id in (select assetlocation_id from assetinvlistrestrictions where assetinvlistrestrictions.parent_id = :assetinvlist_id)) and
          ((:mevidencedivisionids = 0) or ac.evidencedivision_id in (select evidencedivision_id from assetinvlistrestrictions where assetinvlistrestrictions.parent_id = :assetinvlist_id)) and
          ((:mexpensesdivisionids = 0) or ac.expensesdivision_id in (select expensesdivision_id from assetinvlistrestrictions where assetinvlistrestrictions.parent_id = :assetinvlist_id))
         into
          :assetcard_id,
          :smallsubcard_id,
          :inventorynr,
          :name,
          :ean,
          :responsible_id,
          :assetlocation_id,
          :evidencedivision_id,
          :expensesdivision_id,
          :quantity
      do begin
        suspend;
      end
      /* drobny majetek bez rozpisu */
      smallsubcard_id = null;
      for
        select
          ac.id id,
          ac.inventorynr,
          cast(ac.name as varchar(50)) name,
          ac.ean ean,
          ac.responsible_id responsible_id,
          ac.assetlocation_id assetlocation_id,
          ac.evidencedivision_id evidencedivision_id,
          ac.expensesdivision_id expensesdivision_id,
          ac.quantity quantity
        from
          smallassetcards ac
        where
          (ac.status = 0) and
          (ac.purchasedate$date <= :minvdate) and
          ((ac.quantity < 2) or (not exists (select id from smallassetcards2 where ac.id = smallassetcards2.parent_id))) and
          ((:mresponsibleids = 0) or ac.responsible_id in (select responsible_id from assetinvlistrestrictions where assetinvlistrestrictions.parent_id = :assetinvlist_id)) and
          ((:massetlocationids = 0) or ac.assetlocation_id in (select assetlocation_id from assetinvlistrestrictions where assetinvlistrestrictions.parent_id = :assetinvlist_id)) and
          ((:mevidencedivisionids = 0) or ac.evidencedivision_id in (select evidencedivision_id from assetinvlistrestrictions where assetinvlistrestrictions.parent_id = :assetinvlist_id)) and
          ((:mexpensesdivisionids = 0) or ac.expensesdivision_id in (select expensesdivision_id from assetinvlistrestrictions where assetinvlistrestrictions.parent_id = :assetinvlist_id))
         into
          :assetcard_id,
          :inventorynr,
          :name,
          :ean,
          :responsible_id,
          :assetlocation_id,
          :evidencedivision_id,
          :expensesdivision_id,
          :quantity
      do begin
          assetcard_type = 1;
          assetinv_id = :aassetinv_id;
          suspend;
      end
    end
  end
end

Generated by ABRA Software a.s. 27.10.2021 16:34:24