# ledgersmb Model

## Schema public

Standard public schema

### Table: acc_trans

#### Structure of acc_trans

trans_id

  integer

chart_id

  integer

  `NOT NULL`

  `REFERENCES`

amount

  numeric

transdate

  date

  `DEFAULT ('now'::text)::date`

source

  text

cleared

  boolean

  `DEFAULT false`

fx_transaction

  boolean

  `DEFAULT false`

project_id

  integer

memo

  text

invoice_id

  integer

entry_id

  serial

  `PRIMARY KEY`

#### Indexes on acc_trans

acc_trans_chart_id_key

  chart_id

acc_trans_source_key

  lower(source)

acc_trans_trans_id_key

  trans_id

acc_trans_transdate_key

  transdate

### Table: ap

#### Structure of ap

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

invnumber

  text

transdate

  date

  `DEFAULT ('now'::text)::date`

vendor_id

  integer

taxincluded

  boolean

  `DEFAULT false`

amount

  numeric

netamount

  numeric

paid

  numeric

datepaid

  date

duedate

  date

invoice

  boolean

  `DEFAULT false`

ordnumber

  text

curr

  character(3)

notes

  text

employee_id

  integer

till

  character varying(20)

quonumber

  text

intnotes

  text

department_id

  integer

shipvia

  text

language_code

  character varying(6)

ponumber

  text

shippingpoint

  text

terms

  smallint

#### Indexes on ap

ap_employee_id_key

  employee_id

ap_id_key

  id

ap_invnumber_key

  invnumber

ap_ordnumber_key

  ordnumber

ap_quonumber_key

  quonumber

ap_transdate_key

  transdate

ap_vendor_id_key

  vendor_id

### Table: ar

#### Structure of ar

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

invnumber

  text

transdate

  date

  `DEFAULT ('now'::text)::date`

customer_id

  integer

taxincluded

  boolean

amount

  numeric

netamount

  numeric

paid

  numeric

datepaid

  date

duedate

  date

invoice

  boolean

  `DEFAULT false`

shippingpoint

  text

terms

  smallint

notes

  text

curr

  character(3)

ordnumber

  text

employee_id

  integer

till

  character varying(20)

quonumber

  text

intnotes

  text

department_id

  integer

shipvia

  text

language_code

  character varying(6)

ponumber

  text

#### Indexes on ar

ar_customer_id_key

  customer_id

ar_employee_id_key

  employee_id

ar_id_key

  id

ar_invnumber_key

  invnumber

ar_ordnumber_key

  ordnumber

ar_quonumber_key

  quonumber

ar_transdate_key

  transdate

### Table: assembly

#### Structure of assembly

id

  integer

  `PRIMARY KEY`

parts_id

  integer

  `PRIMARY KEY`

qty

  numeric

bom

  boolean

adj

  boolean

#### Indexes on assembly

assembly_id_key

  id

### Table: audittrail

#### Structure of audittrail

trans_id

  integer

tablename

  text

reference

  text

formname

  text

action

  text

transdate

  timestamp without time zone

  `DEFAULT now()`

employee_id

  integer

entry_id

  bigserial

  `PRIMARY KEY`

#### Indexes on audittrail

audittrail_trans_id_key

  trans_id

### Table: business

#### Structure of business

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

description

  text

discount

  numeric

### Table: chart

#### Structure of chart

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

accno

  text

  `NOT NULL`

description

  text

charttype

  character(1)

  `DEFAULT 'A'::bpchar`

category

  character(1)

link

  text

gifi_accno

  text

contra

  boolean

  `DEFAULT false`

#### Indexes on chart

chart_category_key

  category

chart_gifi_accno_key

  gifi_accno

chart_id_key

  id

chart_link_key

  link

#### Tables referencing acc_trans via Foreign Key Constraints

### Table: custom_field_catalog

#### Structure of custom_field_catalog

field_id

  serial

  `PRIMARY KEY`

table_id

  integer

  `REFERENCES`

field_name

  text

### Table: custom_table_catalog

#### Structure of custom_table_catalog

table_id

  serial

  `PRIMARY KEY`

extends

  text

table_name

  text

#### Tables referencing custom_field_catalog via Foreign Key Constraints

### Table: customer

#### Structure of customer

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

name

  character varying(64)

address1

  character varying(32)

address2

  character varying(32)

city

  character varying(32)

state

  character varying(32)

zipcode

  character varying(10)

country

  character varying(32)

contact

  character varying(64)

phone

  character varying(20)

fax

  character varying(20)

email

  text

notes

  text

discount

  numeric

taxincluded

  boolean

  `DEFAULT false`

creditlimit

  numeric

terms

  smallint

customernumber

  character varying(32)

cc

  text

bcc

  text

business_id

  integer

taxnumber

  character varying(32)

sic_code

  character varying(6)

iban

  character varying(34)

bic

  character varying(11)

employee_id

  integer

language_code

  character varying(6)

pricegroup_id

  integer

curr

  character(3)

startdate

  date

enddate

  date

#### Indexes on customer

customer_contact_key

  lower((contact)::text)

customer_customernumber_key

  customernumber

customer_id_key

  id

customer_name_key

  lower((name)::text)

### Table: customertax

#### Structure of customertax

customer_id

  integer

  `PRIMARY KEY`

chart_id

  integer

  `PRIMARY KEY`

#### Indexes on customertax

customer_customer_id_key

  customer_id

### Table: defaults

#### Structure of defaults

setting_key

  text

  `PRIMARY KEY`

value

  text

### Table: department

#### Structure of department

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

description

  text

role

  character(1)

  `DEFAULT 'P'::bpchar`

#### Indexes on department

department_id_key

  id

### Table: dpt_trans

#### Structure of dpt_trans

trans_id

  integer

  `PRIMARY KEY`

department_id

  integer

### Table: employee

#### Structure of employee

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

login

  text

name

  character varying(64)

address1

  character varying(32)

address2

  character varying(32)

city

  character varying(32)

state

  character varying(32)

zipcode

  character varying(10)

country

  character varying(32)

workphone

  character varying(20)

homephone

  character varying(20)

startdate

  date

  `DEFAULT ('now'::text)::date`

enddate

  date

notes

  text

role

  character varying(20)

sales

  boolean

  `DEFAULT false`

email

  text

ssn

  character varying(20)

iban

  character varying(34)

bic

  character varying(11)

managerid

  integer

employeenumber

  character varying(32)

dob

  date

#### Indexes on employee

employee_id_key

  id

employee_name_key

  lower((name)::text)

### Table: exchangerate

#### Structure of exchangerate

curr

  character(3)

  `PRIMARY KEY`

transdate

  date

  `PRIMARY KEY`

buy

  numeric

sell

  numeric

#### Indexes on exchangerate

exchangerate_ct_key

  curr, transdate

### Table: gifi

#### Structure of gifi

accno

  text

  `PRIMARY KEY`

description

  text

### Table: gl

#### Structure of gl

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

reference

  text

description

  text

transdate

  date

  `DEFAULT ('now'::text)::date`

employee_id

  integer

notes

  text

department_id

  integer

#### Indexes on gl

gl_description_key

  lower(description)

gl_employee_id_key

  employee_id

gl_id_key

  id

gl_reference_key

  reference

gl_transdate_key

  transdate

### Table: inventory

#### Structure of inventory

warehouse_id

  integer

parts_id

  integer

trans_id

  integer

orderitems_id

  integer

qty

  numeric

shippingdate

  date

employee_id

  integer

entry_id

  serial

  `PRIMARY KEY`

### Table: invoice

#### Structure of invoice

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('invoiceid'::regclass)`

trans_id

  integer

parts_id

  integer

description

  text

qty

  integer

allocated

  integer

sellprice

  numeric

fxsellprice

  numeric

discount

  real

assemblyitem

  boolean

  `DEFAULT false`

unit

  character varying(5)

project_id

  integer

deliverydate

  date

serialnumber

  text

notes

  text

#### Indexes on invoice

invoice_id_key

  id

invoice_trans_id_key

  trans_id

### Table: jcitems

#### Structure of jcitems

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('jcitemsid'::regclass)`

project_id

  integer

parts_id

  integer

description

  text

qty

  numeric

allocated

  numeric

sellprice

  numeric

fxsellprice

  numeric

serialnumber

  text

checkedin

  timestamp with time zone

checkedout

  timestamp with time zone

employee_id

  integer

notes

  text

#### Indexes on jcitems

jcitems_id_key

  id

### Table: language

#### Structure of language

code

  character varying(6)

  `PRIMARY KEY`

description

  text

### Table: makemodel

#### Structure of makemodel

parts_id

  integer

  `PRIMARY KEY`

make

  text

model

  text

#### Indexes on makemodel

makemodel_make_key

  lower(make)

makemodel_model_key

  lower(model)

makemodel_parts_id_key

  parts_id

### Table: oe

#### Structure of oe

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

ordnumber

  text

transdate

  date

  `DEFAULT ('now'::text)::date`

vendor_id

  integer

customer_id

  integer

amount

  numeric

netamount

  numeric

reqdate

  date

taxincluded

  boolean

shippingpoint

  text

notes

  text

curr

  character(3)

employee_id

  integer

closed

  boolean

  `DEFAULT false`

quotation

  boolean

  `DEFAULT false`

quonumber

  text

intnotes

  text

department_id

  integer

shipvia

  text

language_code

  character varying(6)

ponumber

  text

terms

  smallint

#### Indexes on oe

oe_employee_id_key

  employee_id

oe_id_key

  id

oe_ordnumber_key

  ordnumber

oe_transdate_key

  transdate

### Table: orderitems

#### Structure of orderitems

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('orderitemsid'::regclass)`

trans_id

  integer

parts_id

  integer

description

  text

qty

  numeric

sellprice

  numeric

discount

  numeric

unit

  character varying(5)

project_id

  integer

reqdate

  date

ship

  numeric

serialnumber

  text

notes

  text

#### Indexes on orderitems

orderitems_id_key

  id

orderitems_trans_id_key

  trans_id

### Table: parts

#### Structure of parts

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

partnumber

  text

description

  text

unit

  character varying(5)

listprice

  numeric

sellprice

  numeric

lastcost

  numeric

priceupdate

  date

  `DEFAULT ('now'::text)::date`

weight

  numeric

onhand

  numeric

notes

  text

makemodel

  boolean

  `DEFAULT false`

assembly

  boolean

  `DEFAULT false`

alternate

  boolean

  `DEFAULT false`

rop

  real

inventory_accno_id

  integer

income_accno_id

  integer

expense_accno_id

  integer

bin

  text

obsolete

  boolean

  `DEFAULT false`

bom

  boolean

  `DEFAULT false`

image

  text

drawing

  text

microfiche

  text

partsgroup_id

  integer

project_id

  integer

avgcost

  numeric

#### Indexes on parts

parts_description_key

  lower(description)

parts_id_key

  id

parts_partnumber_key

  lower(partnumber)

#### Tables referencing partstax via Foreign Key Constraints

### Table: partscustomer

#### Structure of partscustomer

parts_id

  integer

customer_id

  integer

pricegroup_id

  integer

pricebreak

  numeric

sellprice

  numeric

validfrom

  date

validto

  date

curr

  character(3)

entry_id

  serial

  `PRIMARY KEY`

### Table: partsgroup

#### Structure of partsgroup

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

partsgroup

  text

#### Indexes on partsgroup

partsgroup_id_key

  id

### Table: partstax

#### Structure of partstax

parts_id

  integer

  `PRIMARY KEY`

  `REFERENCES`

chart_id

  integer

  `PRIMARY KEY`

  `REFERENCES`

taxcategory_id

  integer

  `REFERENCES`

#### Indexes on partstax

partstax_parts_id_key

  parts_id

### Table: partsvendor

#### Structure of partsvendor

vendor_id

  integer

parts_id

  integer

partnumber

  text

leadtime

  smallint

lastcost

  numeric

curr

  character(3)

entry_id

  serial

  `PRIMARY KEY`

#### Indexes on partsvendor

partsvendor_parts_id_key

  parts_id

partsvendor_vendor_id_key

  vendor_id

### Table: pricegroup

#### Structure of pricegroup

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

pricegroup

  text

#### Indexes on pricegroup

pricegroup_id_key

  id

pricegroup_pricegroup_key

  pricegroup

### Table: project

#### Structure of project

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

projectnumber

  text

description

  text

startdate

  date

enddate

  date

parts_id

  integer

production

  numeric

completed

  numeric

customer_id

  integer

#### Indexes on project

project_id_key

  id

### Table: recurring

#### Structure of recurring

id

  integer

  `PRIMARY KEY`

reference

  text

startdate

  date

nextdate

  date

enddate

  date

repeat

  smallint

unit

  character varying(6)

howmany

  integer

payment

  boolean

  `DEFAULT false`

### Table: recurringemail

#### Structure of recurringemail

id

  integer

  `PRIMARY KEY`

formname

  text

format

  text

message

  text

### Table: recurringprint

#### Structure of recurringprint

id

  integer

  `PRIMARY KEY`

formname

  text

format

  text

printer

  text

### Table: shipto

#### Structure of shipto

trans_id

  integer

shiptoname

  character varying(64)

shiptoaddress1

  character varying(32)

shiptoaddress2

  character varying(32)

shiptocity

  character varying(32)

shiptostate

  character varying(32)

shiptozipcode

  character varying(10)

shiptocountry

  character varying(32)

shiptocontact

  character varying(64)

shiptophone

  character varying(20)

shiptofax

  character varying(20)

shiptoemail

  text

entry_id

  serial

  `PRIMARY KEY`

#### Indexes on shipto

shipto_trans_id_key

  trans_id

### Table: sic

#### Structure of sic

code

  character varying(6)

  `PRIMARY KEY`

sictype

  character(1)

description

  text

### Table: status

#### Structure of status

trans_id

  integer

  `PRIMARY KEY`

formname

  text

printed

  boolean

  `DEFAULT false`

emailed

  boolean

  `DEFAULT false`

spoolfile

  text

#### Indexes on status

status_trans_id_key

  trans_id

### Table: tax

#### Structure of tax

chart_id

  integer

  `PRIMARY KEY`

  `REFERENCES`

rate

  numeric

taxnumber

  text

validto

  date

pass

  integer

  `NOT NULL`

taxmodule_id

  integer

  `NOT NULL`

  `DEFAULT 1`

  `REFERENCES`

### Table: taxcategory

#### Structure of taxcategory

taxcategory_id

  serial

  `PRIMARY KEY`

taxcategoryname

  text

  `NOT NULL`

taxmodule_id

  integer

  `NOT NULL`

  `REFERENCES`

#### Tables referencing partstax via Foreign Key Constraints

### Table: taxmodule

#### Structure of taxmodule

taxmodule_id

  serial

  `PRIMARY KEY`

taxmodulename

  text

  `NOT NULL`

#### Tables referencing tax via Foreign Key Constraints

### Table: transactions

#### Structure of transactions

id

  integer

  `PRIMARY KEY`

table_name

  text

### Table: translation

#### Structure of translation

trans_id

  integer

  `PRIMARY KEY`

language_code

  character varying(6)

  `PRIMARY KEY`

description

  text

#### Indexes on translation

translation_trans_id_key

  trans_id

### Table: vendor

#### Structure of vendor

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

name

  character varying(64)

address1

  character varying(32)

address2

  character varying(32)

city

  character varying(32)

state

  character varying(32)

zipcode

  character varying(10)

country

  character varying(32)

contact

  character varying(64)

phone

  character varying(20)

fax

  character varying(20)

email

  text

notes

  text

terms

  smallint

taxincluded

  boolean

  `DEFAULT false`

vendornumber

  character varying(32)

cc

  text

bcc

  text

gifi_accno

  character varying(30)

business_id

  integer

taxnumber

  character varying(32)

sic_code

  character varying(6)

discount

  numeric

creditlimit

  numeric

iban

  character varying(34)

bic

  character varying(11)

employee_id

  integer

language_code

  character varying(6)

pricegroup_id

  integer

curr

  character(3)

startdate

  date

enddate

  date

#### Indexes on vendor

vendor_contact_key

  lower((contact)::text)

vendor_id_key

  id

vendor_name_key

  lower((name)::text)

vendor_vendornumber_key

  vendornumber

### Table: vendortax

#### Structure of vendortax

vendor_id

  integer

  `PRIMARY KEY`

chart_id

  integer

  `PRIMARY KEY`

#### Indexes on vendortax

vendortax_vendor_id_key

  vendor_id

### Table: warehouse

#### Structure of warehouse

id

  integer

  `PRIMARY KEY`

  `DEFAULT nextval('id'::regclass)`

description

  text

### Table: yearend

#### Structure of yearend

trans_id

  integer

  `PRIMARY KEY`

transdate

  date

### add_custom_field( character varying, character varying, character varying )

add_custom_field( character varying, character varying, character varying )

#### Function Properties

Language Return Type PLPGSQL boolean

    DECLARE
    table_name ALIAS FOR $1;
    new_field_name ALIAS FOR $2;
    field_datatype ALIAS FOR $3;

    BEGIN
    	EXECUTE 'SELECT TABLE_ID FROM custom_table_catalog
    		WHERE extends = ''' || table_name || ''' ';
    	IF NOT FOUND THEN
    		BEGIN
    			INSERT INTO custom_table_catalog (extends)
    				VALUES (table_name);
    			EXECUTE 'CREATE TABLE custom_'||table_name ||
    				' (row_id INT PRIMARY KEY)';
    		EXCEPTION WHEN duplicate_table THEN
    			-- do nothing
    		END;
    	END IF;
    	EXECUTE 'INSERT INTO custom_field_catalog (field_name, table_id)
    	VALUES ( ''' || new_field_name ||''', (SELECT table_id FROM custom_table_catalog
    		WHERE extends = '''|| table_name || '''))';
    	EXECUTE 'ALTER TABLE custom_'||table_name || ' ADD COLUMN '
    		|| new_field_name || ' ' || field_datatype;
    	RETURN TRUE;
    END;

### avgcost( integer )

avgcost( integer )

#### Function Properties

Language Return Type PLPGSQL double precision

    DECLARE

    v_cost float;
    v_qty float;
    v_parts_id alias for $1;

    BEGIN

      SELECT INTO v_cost, v_qty SUM(i.sellprice * i.qty), SUM(i.qty)
      FROM invoice i
      JOIN ap a ON (a.id = i.trans_id)
      WHERE i.parts_id = v_parts_id;

      IF v_cost IS NULL THEN
        v_cost := 0;
      END IF;

      IF NOT v_qty IS NULL THEN
        IF v_qty = 0 THEN
          v_cost := 0;
        ELSE
          v_cost := v_cost/v_qty;
        END IF;
      END IF;

    RETURN v_cost;
    END;

### check_department( )

check_department( )

#### Function Properties

Language Return Type PLPGSQL "trigger"

    declare
      dpt_id int;

    begin

      if new.department_id = 0 then
        delete from dpt_trans where trans_id = new.id;
        return NULL;
      end if;

      select into dpt_id trans_id from dpt_trans where trans_id = new.id;

      if dpt_id > 0 then
        update dpt_trans set department_id = new.department_id where trans_id = dpt_id;
      else
        insert into dpt_trans (trans_id, department_id) values (new.id, new.department_id);
      end if;
    return NULL;

    end;

### check_inventory( )

check_inventory( )

#### Function Properties

Language Return Type PLPGSQL "trigger"

    declare
      itemid int;
      row_data inventory%rowtype;

    begin

      if not old.quotation then
        for row_data in select * from inventory where trans_id = old.id loop
          select into itemid id from orderitems where trans_id = old.id and id = row_data.orderitems_id;

          if itemid is null then
    	delete from inventory where trans_id = old.id and orderitems_id = row_data.orderitems_id;
          end if;
        end loop;
      end if;
    return old;
    end;

### del_customer( )

del_customer( )

#### Function Properties

Language Return Type PLPGSQL "trigger"

    begin
      delete from shipto where trans_id = old.id;
      delete from customertax where customer_id = old.id;
      delete from partscustomer where customer_id = old.id;
      return NULL;
    end;

### del_department( )

del_department( )

#### Function Properties

Language Return Type PLPGSQL "trigger"

    begin
      delete from dpt_trans where trans_id = old.id;
      return NULL;
    end;

### del_exchangerate( )

del_exchangerate( )

#### Function Properties

Language Return Type PLPGSQL "trigger"

    declare
      t_transdate date;
      t_curr char(3);
      t_id int;
      d_curr text;

    begin

      select into d_curr substr(value,1,3) from defaults where setting_key = 'curr';

      if TG_RELNAME = 'ar' then
        select into t_curr, t_transdate curr, transdate from ar where id = old.id;
      end if;
      if TG_RELNAME = 'ap' then
        select into t_curr, t_transdate curr, transdate from ap where id = old.id;
      end if;
      if TG_RELNAME = 'oe' then
        select into t_curr, t_transdate curr, transdate from oe where id = old.id;
      end if;

      if d_curr != t_curr then

        select into t_id a.id from acc_trans ac
        join ar a on (a.id = ac.trans_id)
        where a.curr = t_curr
        and ac.transdate = t_transdate

        except select a.id from ar a where a.id = old.id

        union

        select a.id from acc_trans ac
        join ap a on (a.id = ac.trans_id)
        where a.curr = t_curr
        and ac.transdate = t_transdate

        except select a.id from ap a where a.id = old.id

        union

        select o.id from oe o
        where o.curr = t_curr
        and o.transdate = t_transdate

        except select o.id from oe o where o.id = old.id;

        if not found then
          delete from exchangerate where curr = t_curr and transdate = t_transdate;
        end if;
      end if;
    return old;

    end;

### del_recurring( )

del_recurring( )

#### Function Properties

Language Return Type PLPGSQL "trigger"

    BEGIN
      DELETE FROM recurring WHERE id = old.id;
      DELETE FROM recurringemail WHERE id = old.id;
      DELETE FROM recurringprint WHERE id = old.id;
      RETURN NULL;
    END;

### del_vendor( )

del_vendor( )

#### Function Properties

Language Return Type PLPGSQL "trigger"

    begin
      delete from shipto where trans_id = old.id;
      delete from vendortax where vendor_id = old.id;
      delete from partsvendor where vendor_id = old.id;
      return NULL;
    end;

### del_yearend( )

del_yearend( )

#### Function Properties

Language Return Type PLPGSQL "trigger"

    begin
      delete from yearend where trans_id = old.id;
      return NULL;
    end;

### drop_custom_field( character varying, character varying )

drop_custom_field( character varying, character varying )

#### Function Properties

Language Return Type PLPGSQL boolean

    DECLARE
    table_name ALIAS FOR $1;
    custom_field_name ALIAS FOR $2;
    BEGIN
    	DELETE FROM custom_field_catalog
    	WHERE field_name = custom_field_name AND
    		table_id = (SELECT table_id FROM custom_table_catalog
    			WHERE extends = table_name);
    	EXECUTE 'ALTER TABLE custom_' || table_name ||
    		' DROP COLUMN ' || custom_field_name;
    	RETURN TRUE;
    END;

### lastcost( integer )

lastcost( integer )

#### Function Properties

Language Return Type PLPGSQL double precision

    DECLARE

    v_cost float;
    v_parts_id alias for $1;

    BEGIN

      SELECT INTO v_cost sellprice FROM invoice i
      JOIN ap a ON (a.id = i.trans_id)
      WHERE i.parts_id = v_parts_id
      ORDER BY a.transdate desc, a.id desc
      LIMIT 1;

      IF v_cost IS NULL THEN
        v_cost := 0;
      END IF;

    RETURN v_cost;
    END;

### trigger_parts_short( )

trigger_parts_short( )

#### Function Properties

Language Return Type PLPGSQL "trigger"

    BEGIN
      IF NEW.onhand >= NEW.rop THEN
        NOTIFY parts_short;
      END IF;
      RETURN NEW;
    END;

### update_user( integer, text )

update_user( integer, text )

#### Function Properties

Language Return Type SQL integer

Takes int4 which is users.id and text which is username. Will update username based on id. Username is unique

       UPDATE users SET username = '$2' WHERE id = $1;
       SELECT 1;