USP_DATAFORMTEMPLATE_ADD_INVOICE_GL
The save procedure used by the add dataform template "Invoice Add Form With Inline Distribution".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@VENDORID | uniqueidentifier | IN | Vendor |
@NUMBER | nvarchar(60) | IN | Invoice number |
@DATEDUE | datetime | IN | Due date |
@PURCHASEORDERID | nvarchar(20) | IN | PO number |
@AMOUNT | money | IN | Invoice amount |
@DATE | datetime | IN | Invoice date |
@REMITADDRESSID | uniqueidentifier | IN | Remit to address |
@DISCOUNTPERCENT | numeric(20, 4) | IN | Discount percent |
@DISCOUNTAMOUNT | money | IN | Discount amount |
@DISCOUNTEXPIRATIONDATE | datetime | IN | Discount expiration date |
@SEPARATEPAYMENT | bit | IN | Create a separate disbursement for this invoice |
@PAYMENTMETHODCODE | tinyint | IN | Payment method |
@POSTDATE | datetime | IN | Post date |
@POSTSTATUSCODE | tinyint | IN | Post status |
@BANKACCOUNTID | uniqueidentifier | IN | Bank account |
@FINANCIALTRANSACTION1099DISTRIBUTIONS | xml | IN | 1099 distribution |
@DESCRIPTION | nvarchar(100) | IN | Invoice description |
@LINEITEMS | xml | IN | Line items |
Definition
Copy
create procedure dbo.USP_DATAFORMTEMPLATE_ADD_INVOICE_GL
(
@ID uniqueidentifier = null output
,@CHANGEAGENTID uniqueidentifier = null
,@VENDORID uniqueidentifier = null
,@NUMBER nvarchar(60) = ''
,@DATEDUE datetime = null
,@PURCHASEORDERID nvarchar(20) = ''
,@AMOUNT money = 0
,@DATE datetime = null
,@REMITADDRESSID uniqueidentifier = null
,@DISCOUNTPERCENT numeric(20,4) = 0
,@DISCOUNTAMOUNT money = 0
,@DISCOUNTEXPIRATIONDATE datetime = null
,@SEPARATEPAYMENT bit = 0
,@PAYMENTMETHODCODE tinyint = 1
,@POSTDATE datetime = null
,@POSTSTATUSCODE tinyint = 1
,@BANKACCOUNTID uniqueidentifier = null
,@FINANCIALTRANSACTION1099DISTRIBUTIONS xml = null
,@DESCRIPTION nvarchar(100) = ''
,@LINEITEMS xml = null
)
as
set nocount on;
if @ID is null
set @ID = newid();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
begin try
-- Record ID 101 = Invoice
if @POSTSTATUSCODE = 3 and @POSTDATE is not null
set @POSTDATE = null;
exec dbo.USP_FINANCIALTRANSACTION_ADD @ID, @CHANGEAGENTID, @VENDORID, @NUMBER, 101, @AMOUNT, @DATE, @POSTDATE, @POSTSTATUSCODE, @DESCRIPTION, @LINEITEMS;
-- Recalc from DISCOUNTTOTAL to get DISCOUNTAMOUNT or DISCOUNTPERCENT if one or the other is missing
-- We don't do both because we have to trust what is given due to mathematical value constraints.
if @DISCOUNTAMOUNT = 0 and @DISCOUNTPERCENT > 0
set @DISCOUNTAMOUNT = @AMOUNT / @DISCOUNTPERCENT;
else if @DISCOUNTPERCENT = 0 and @DISCOUNTAMOUNT > 0 and @AMOUNT > 0
set @DISCOUNTPERCENT = (@DISCOUNTAMOUNT / @AMOUNT) * 100;
-- Validate that the vendor allows invoices to be created
if not exists(
select V.ID
from dbo.VENDOR V
where V.ID = @VENDORID and V.ALLOWTOCREATEINVOICES = 1)
begin
raiserror('ERR_VENDOR_NOT_ALLOW_INVOICES', 13, 1);
end
if @AMOUNT <= 0
raiserror('ERR_NOT_ALLOW_ZEROAMOUNT', 13, 1);
-- handle inserting the data
insert into dbo.INVOICE (
ID,
DATEDUE,
PURCHASEORDERID,
REMITADDRESSID,
DISCOUNTEXPIRATIONDATE,
DISCOUNTPERCENT,
DISCOUNTAMOUNT,
SEPARATEPAYMENT,
--PAYMENTMETHODCODE,
BANKACCOUNTID,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (
@ID,
@DATEDUE,
@PURCHASEORDERID,
@REMITADDRESSID,
@DISCOUNTEXPIRATIONDATE,
@DISCOUNTPERCENT,
@DISCOUNTAMOUNT,
@SEPARATEPAYMENT,
--@PAYMENTMETHODCODE,
@BANKACCOUNTID,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
-- We cannot eliminate date due from the invoice itself, since it is in the document (from the vendor) and we need to record it
-- regardless of schedule
exec USP_FINANCIALTRANSACTIONSCHEDULE_ADD null, @CHANGEAGENTID, @ID, @DATEDUE, @AMOUNT
if @FINANCIALTRANSACTION1099DISTRIBUTIONS is not null
exec dbo.USP_FINANCIALTRANSACTION_1099DISTRIBUTION_UPDATEFROMXML @ID, @VENDORID, @FINANCIALTRANSACTION1099DISTRIBUTIONS, @CHANGEAGENTID, @CURRENTDATE;
else if exists(select * from dbo.VENDOR1099DISTRIBUTION where VENDOR1099SETTINGID = @VENDORID)
insert into dbo.FINANCIALTRANSACTION1099DISTRIBUTION (
ID,
FINANCIALTRANSACTIONID,
BOXNUMBER1099ID,
STATEID,
[PERCENT],
AMOUNT,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
newid(),
@ID,
BOXNUMBER1099ID,
STATEID,
[PERCENT],
((@AMOUNT * [PERCENT]) / 100),
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from dbo.VENDOR1099DISTRIBUTION
where VENDOR1099SETTINGID = @VENDORID;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;