Editing Sales.SalesOrderHeader (table)

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 2: Line 2:
  
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
|- valign="top"
+
|-
 
| '''Table
 
| '''Table
 
| Sales.SalesOrderHeader
 
| Sales.SalesOrderHeader
Line 8: Line 8:
 
| '''Description
 
| '''Description
 
| General sales order information.
 
| General sales order information.
 +
|-
 
|}
 
|}
  
=== Columns ===
+
 
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
|- style="background:silver"
 
|- style="background:silver"
Line 17: Line 18:
 
| '''Nullable
 
| '''Nullable
 
| '''Default
 
| '''Default
| '''Description
+
| '''Description / PK / Index
 
+
 
|- valign="top"
 
|- valign="top"
 
| SalesOrderID
 
| SalesOrderID
Line 24: Line 25:
 
| not null
 
| not null
 
|  
 
|  
| Primary key.
+
| Primary key.<br />PK_SalesOrderHeader_SalesOrderID
 
|- valign="top"
 
|- valign="top"
 
| RevisionNumber
 
| RevisionNumber
Line 30: Line 31:
 
| not null
 
| not null
 
| ((0))
 
| ((0))
| Incremental number to track changes to the sales order over time.
+
| Incremental number to track changes to the sales order over time.<br />
 
|- valign="top"
 
|- valign="top"
 
| OrderDate
 
| OrderDate
Line 36: Line 37:
 
| not null
 
| not null
 
| (getdate())
 
| (getdate())
| Dates the sales order was created.
+
| Dates the sales order was created.<br />
 
|- valign="top"
 
|- valign="top"
 
| DueDate
 
| DueDate
Line 42: Line 43:
 
| not null
 
| not null
 
|  
 
|  
| Date the order is due to the customer.
+
| Date the order is due to the customer.<br />
 
|- valign="top"
 
|- valign="top"
 
| ShipDate
 
| ShipDate
Line 48: Line 49:
 
| null
 
| null
 
|  
 
|  
| Date the order was shipped to the customer.
+
| Date the order was shipped to the customer.<br />
 
|- valign="top"
 
|- valign="top"
 
| Status
 
| Status
Line 54: Line 55:
 
| not null
 
| not null
 
| ((1))
 
| ((1))
| Order current status. 1 = In process; 2 = Approved; 3 = Backordered; 4 = Rejected; 5 = Shipped; 6 = Cancelled
+
| Order current status. 1 = In process; 2 = Approved; 3 = Backordered; 4 = Rejected; 5 = Shipped; 6 = Cancelled<br />
 
|- valign="top"
 
|- valign="top"
 
| OnlineOrderFlag
 
| OnlineOrderFlag
Line 60: Line 61:
 
| not null
 
| not null
 
| ((1))
 
| ((1))
| 0 = Order placed by sales person. 1 = Order placed online by customer.
+
| 0 = Order placed by sales person. 1 = Order placed online by customer.<br />
 
|- valign="top"
 
|- valign="top"
 
| SalesOrderNumber
 
| SalesOrderNumber
Line 66: Line 67:
 
|  
 
|  
 
|  
 
|  
| Unique sales order identification number.
+
| Unique sales order identification number.<br />AK_SalesOrderHeader_SalesOrderNumber
 
|- valign="top"
 
|- valign="top"
 
| PurchaseOrderNumber
 
| PurchaseOrderNumber
Line 72: Line 73:
 
| null
 
| null
 
|  
 
|  
| Customer purchase order number reference.  
+
| Customer purchase order number reference. <br />
 
|- valign="top"
 
|- valign="top"
 
| AccountNumber
 
| AccountNumber
Line 78: Line 79:
 
| null
 
| null
 
|  
 
|  
| Financial accounting number reference.
+
| Financial accounting number reference.<br />
 
|- valign="top"
 
|- valign="top"
 
| CustomerID
 
| CustomerID
Line 84: Line 85:
 
| not null
 
| not null
 
|  
 
|  
| Customer identification number. Foreign key to Customer.CustomerID.
+
| Customer identification number. Foreign key to Customer.CustomerID.<br />IX_SalesOrderHeader_CustomerID
 
|- valign="top"
 
|- valign="top"
 
| ContactID
 
| ContactID
Line 90: Line 91:
 
| not null
 
| not null
 
|  
 
|  
| Customer contact identification number. Foreign key to Contact.ContactID.
+
| Customer contact identification number. Foreign key to Contact.ContactID.<br />
 
|- valign="top"
 
|- valign="top"
 
| SalesPersonID
 
| SalesPersonID
Line 96: Line 97:
 
| null
 
| null
 
|  
 
|  
| Sales person who created the sales order. Foreign key to SalesPerson.SalePersonID.
+
| Sales person who created the sales order. Foreign key to SalesPerson.SalePersonID.<br />IX_SalesOrderHeader_SalesPersonID
 
|- valign="top"
 
|- valign="top"
 
| TerritoryID
 
| TerritoryID
Line 102: Line 103:
 
| null
 
| null
 
|  
 
|  
| Territory in which the sale was made. Foreign key to SalesTerritory.SalesTerritoryID.
+
| Territory in which the sale was made. Foreign key to SalesTerritory.SalesTerritoryID.<br />
 
|- valign="top"
 
|- valign="top"
 
| BillToAddressID
 
| BillToAddressID
Line 108: Line 109:
 
| not null
 
| not null
 
|  
 
|  
| Customer billing address. Foreign key to Address.AddressID.
+
| Customer billing address. Foreign key to Address.AddressID.<br />
 
|- valign="top"
 
|- valign="top"
 
| ShipToAddressID
 
| ShipToAddressID
Line 114: Line 115:
 
| not null
 
| not null
 
|  
 
|  
| Customer shipping address. Foreign key to Address.AddressID.
+
| Customer shipping address. Foreign key to Address.AddressID.<br />
 
|- valign="top"
 
|- valign="top"
 
| ShipMethodID
 
| ShipMethodID
Line 120: Line 121:
 
| not null
 
| not null
 
|  
 
|  
| Shipping method. Foreign key to ShipMethod.ShipMethodID.
+
| Shipping method. Foreign key to ShipMethod.ShipMethodID.<br />
 
|- valign="top"
 
|- valign="top"
 
| CreditCardID
 
| CreditCardID
Line 126: Line 127:
 
| null
 
| null
 
|  
 
|  
| Credit card identification number. Foreign key to CreditCard.CreditCardID.
+
| Credit card identification number. Foreign key to CreditCard.CreditCardID.<br />
 
|- valign="top"
 
|- valign="top"
 
| CreditCardApprovalCode
 
| CreditCardApprovalCode
Line 132: Line 133:
 
| null
 
| null
 
|  
 
|  
| Approval code provided by the credit card company.
+
| Approval code provided by the credit card company.<br />
 
|- valign="top"
 
|- valign="top"
 
| CurrencyRateID
 
| CurrencyRateID
Line 138: Line 139:
 
| null
 
| null
 
|  
 
|  
| Currency exchange rate used. Foreign key to CurrencyRate.CurrencyRateID.
+
| Currency exchange rate used. Foreign key to CurrencyRate.CurrencyRateID.<br />
 
|- valign="top"
 
|- valign="top"
 
| SubTotal
 
| SubTotal
Line 144: Line 145:
 
| not null
 
| not null
 
| ((0.00))
 
| ((0.00))
| Sales subtotal. Computed as SUM(SalesOrderDetail.LineTotal)for the appropriate SalesOrderID.
+
| Sales subtotal. Computed as SUM(SalesOrderDetail.LineTotal)for the appropriate SalesOrderID.<br />
 
|- valign="top"
 
|- valign="top"
 
| TaxAmt
 
| TaxAmt
Line 150: Line 151:
 
| not null
 
| not null
 
| ((0.00))
 
| ((0.00))
| Tax amount.
+
| Tax amount.<br />
 
|- valign="top"
 
|- valign="top"
 
| Freight
 
| Freight
Line 156: Line 157:
 
| not null
 
| not null
 
| ((0.00))
 
| ((0.00))
| Shipping cost.
+
| Shipping cost.<br />
 
|- valign="top"
 
|- valign="top"
 
| TotalDue
 
| TotalDue
Line 162: Line 163:
 
|  
 
|  
 
|  
 
|  
| Total due from customer. Computed as Subtotal + TaxAmt + Freight.
+
| Total due from customer. Computed as Subtotal + TaxAmt + Freight.<br />
 
|- valign="top"
 
|- valign="top"
 
| Comment
 
| Comment
Line 168: Line 169:
 
| null
 
| null
 
|  
 
|  
| Sales representative comments.
+
| Sales representative comments.<br />
 
|- valign="top"
 
|- valign="top"
 
| rowguid
 
| rowguid
Line 174: Line 175:
 
| not null
 
| not null
 
| (newid())
 
| (newid())
| ROWGUIDCOL number uniquely identifying the record. Used to support a merge replication sample.
+
| ROWGUIDCOL number uniquely identifying the record. Used to support a merge replication sample.<br />AK_SalesOrderHeader_rowguid
 
|- valign="top"
 
|- valign="top"
 
| ModifiedDate
 
| ModifiedDate
Line 180: Line 181:
 
| not null
 
| not null
 
| (getdate())
 
| (getdate())
| Date and time the record was last updated.
+
| Date and time the record was last updated.<br />
|}
 
 
 
=== Primary Key ===
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
|- style="background:silver"
 
| '''Primary Key
 
| '''Columns
 
|- valign="top"
 
| PK_SalesOrderHeader_SalesOrderID
 
| SalesOrderID
 
|}
 
 
 
=== Indexes ===
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
|- style="background:silver"
 
| '''Index
 
| '''Type
 
| '''Columns
 
 
 
|- valign="top"
 
| AK_SalesOrderHeader_rowguid
 
| Unique
 
| rowguid
 
|- valign="top"
 
| AK_SalesOrderHeader_SalesOrderNumber
 
| Unique
 
| SalesOrderNumber
 
|- valign="top"
 
| IX_SalesOrderHeader_CustomerID
 
|
 
| CustomerID
 
|- valign="top"
 
| IX_SalesOrderHeader_SalesPersonID
 
|
 
| SalesPersonID
 
 
|}
 
|}
  
=== Check Constraints ===
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
|- style="background:silver"
 
| '''Check Constraint
 
| '''Expression
 
| '''Description
 
  
|- valign="top"
 
| CK_SalesOrderHeader_DueDate
 
| ([DueDate]>=[OrderDate])
 
| Check constraint [DueDate] >= [OrderDate]
 
|- valign="top"
 
| CK_SalesOrderHeader_Freight
 
| ([Freight]>=(0.00))
 
| Check constraint [Freight] >= (0.00)
 
|- valign="top"
 
| CK_SalesOrderHeader_ShipDate
 
| ([ShipDate]>=[OrderDate] OR [ShipDate] IS NULL)
 
| Check constraint [ShipDate] >= [OrderDate] OR [ShipDate] IS NULL
 
|- valign="top"
 
| CK_SalesOrderHeader_Status
 
| ([Status]>=(0) AND [Status]<=(8))
 
| Check constraint [Status] BETWEEN (0) AND (8)
 
|- valign="top"
 
| CK_SalesOrderHeader_SubTotal
 
| ([SubTotal]>=(0.00))
 
| Check constraint [SubTotal] >= (0.00)
 
|- valign="top"
 
| CK_SalesOrderHeader_TaxAmt
 
| ([TaxAmt]>=(0.00))
 
| Check constraint [TaxAmt] >= (0.00)
 
|}
 
  
=== Foreign Keys ===
 
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
|- style="background:silver"
 
|- style="background:silver"
Line 257: Line 191:
 
| '''Column
 
| '''Column
 
| '''Referenced Column
 
| '''Referenced Column
 
+
|- valign="top"
+
|-
 
| [[Person.Address_(table)|Person.Address]]
 
| [[Person.Address_(table)|Person.Address]]
 
| BillToAddressID
 
| BillToAddressID
 
| AddressID
 
| AddressID
|- valign="top"
+
|-
 
| [[Person.Address_(table)|Person.Address]]
 
| [[Person.Address_(table)|Person.Address]]
 
| ShipToAddressID
 
| ShipToAddressID
 
| AddressID
 
| AddressID
|- valign="top"
+
|-
 
| [[Person.Contact_(table)|Person.Contact]]
 
| [[Person.Contact_(table)|Person.Contact]]
 
| ContactID
 
| ContactID
 
| ContactID
 
| ContactID
|- valign="top"
+
|-
 
| [[Sales.CreditCard_(table)|Sales.CreditCard]]
 
| [[Sales.CreditCard_(table)|Sales.CreditCard]]
 
| CreditCardID
 
| CreditCardID
 
| CreditCardID
 
| CreditCardID
|- valign="top"
+
|-
 
| [[Sales.CurrencyRate_(table)|Sales.CurrencyRate]]
 
| [[Sales.CurrencyRate_(table)|Sales.CurrencyRate]]
 
| CurrencyRateID
 
| CurrencyRateID
 
| CurrencyRateID
 
| CurrencyRateID
|- valign="top"
+
|-
 
| [[Sales.Customer_(table)|Sales.Customer]]
 
| [[Sales.Customer_(table)|Sales.Customer]]
 
| CustomerID
 
| CustomerID
 
| CustomerID
 
| CustomerID
|- valign="top"
+
|-
 
| [[Sales.SalesPerson_(table)|Sales.SalesPerson]]
 
| [[Sales.SalesPerson_(table)|Sales.SalesPerson]]
 
| SalesPersonID
 
| SalesPersonID
 
| SalesPersonID
 
| SalesPersonID
|- valign="top"
+
|-
 
| [[Sales.SalesTerritory_(table)|Sales.SalesTerritory]]
 
| [[Sales.SalesTerritory_(table)|Sales.SalesTerritory]]
 
| TerritoryID
 
| TerritoryID
 
| TerritoryID
 
| TerritoryID
|- valign="top"
+
|-
 
| [[Purchasing.ShipMethod_(table)|Purchasing.ShipMethod]]
 
| [[Purchasing.ShipMethod_(table)|Purchasing.ShipMethod]]
 
| ShipMethodID
 
| ShipMethodID
Line 296: Line 230:
 
|}
 
|}
  
=== Detail Tables ===
+
 
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
|- style="background:silver"
 
|- style="background:silver"
Line 302: Line 236:
 
| '''Column
 
| '''Column
 
| '''Referencing Column
 
| '''Referencing Column
 
+
|- valign="top"
+
|-
 
| [[Sales.SalesOrderDetail_(table)|Sales.SalesOrderDetail]]
 
| [[Sales.SalesOrderDetail_(table)|Sales.SalesOrderDetail]]
 
| SalesOrderID
 
| SalesOrderID
 
| SalesOrderID
 
| SalesOrderID
|- valign="top"
+
|-
 
| [[Sales.SalesOrderHeaderSalesReason_(table)|Sales.SalesOrderHeaderSalesReason]]
 
| [[Sales.SalesOrderHeaderSalesReason_(table)|Sales.SalesOrderHeaderSalesReason]]
 
| SalesOrderID
 
| SalesOrderID
Line 313: Line 247:
 
|}
 
|}
  
=== Triggers ===
+
 
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
|- style="background:silver"
 
|- style="background:silver"
| '''Trigger
+
| '''Triggers
 
| '''Type
 
| '''Type
 
+
|- valign="top"
+
|-
 
| uSalesOrderHeader
 
| uSalesOrderHeader
 
| ON UPDATE
 
| ON UPDATE
 
|}
 
|}
  
==== Trigger uSalesOrderHeader ====
 
<pre>
 
CREATE TRIGGER [Sales].[uSalesOrderHeader] ON [Sales].[SalesOrderHeader]
 
AFTER UPDATE NOT FOR REPLICATION AS
 
BEGIN
 
    DECLARE @Count int;
 
  
    SET @Count = @@ROWCOUNT;
 
    IF @Count = 0
 
        RETURN;
 
 
    SET NOCOUNT ON;
 
 
    BEGIN TRY
 
        -- Update RevisionNumber for modification of any field EXCEPT the Status.
 
        IF NOT UPDATE([Status])
 
        BEGIN
 
            UPDATE [Sales].[SalesOrderHeader]
 
            SET [Sales].[SalesOrderHeader].[RevisionNumber] =
 
                [Sales].[SalesOrderHeader].[RevisionNumber] + 1
 
            WHERE [Sales].[SalesOrderHeader].[SalesOrderID] IN
 
                (SELECT inserted.[SalesOrderID] FROM inserted);
 
        END;
 
 
        -- Update the SalesPerson SalesYTD when SubTotal is updated
 
        IF UPDATE([SubTotal])
 
        BEGIN
 
            DECLARE @StartDate datetime,
 
                    @EndDate datetime
 
 
            SET @StartDate = [dbo].[ufnGetAccountingStartDate]();
 
            SET @EndDate = [dbo].[ufnGetAccountingEndDate]();
 
 
            UPDATE [Sales].[SalesPerson]
 
            SET [Sales].[SalesPerson].[SalesYTD] =
 
                (SELECT SUM([Sales].[SalesOrderHeader].[SubTotal])
 
                FROM [Sales].[SalesOrderHeader]
 
                WHERE [Sales].[SalesPerson].[SalesPersonID] = [Sales].[SalesOrderHeader].[SalesPersonID]
 
                    AND ([Sales].[SalesOrderHeader].[Status] = 5) -- Shipped
 
                    AND [Sales].[SalesOrderHeader].[OrderDate] BETWEEN @StartDate AND @EndDate)
 
            WHERE [Sales].[SalesPerson].[SalesPersonID]
 
                IN (SELECT DISTINCT inserted.[SalesPersonID] FROM inserted
 
                    WHERE inserted.[OrderDate] BETWEEN @StartDate AND @EndDate);
 
 
            -- Update the SalesTerritory SalesYTD when SubTotal is updated
 
            UPDATE [Sales].[SalesTerritory]
 
            SET [Sales].[SalesTerritory].[SalesYTD] =
 
                (SELECT SUM([Sales].[SalesOrderHeader].[SubTotal])
 
                FROM [Sales].[SalesOrderHeader]
 
                WHERE [Sales].[SalesTerritory].[TerritoryID] = [Sales].[SalesOrderHeader].[TerritoryID]
 
                    AND ([Sales].[SalesOrderHeader].[Status] = 5) -- Shipped
 
                    AND [Sales].[SalesOrderHeader].[OrderDate] BETWEEN @StartDate AND @EndDate)
 
            WHERE [Sales].[SalesTerritory].[TerritoryID]
 
                IN (SELECT DISTINCT inserted.[TerritoryID] FROM inserted
 
                    WHERE inserted.[OrderDate] BETWEEN @StartDate AND @EndDate);
 
        END;
 
    END TRY
 
    BEGIN CATCH
 
        EXECUTE [dbo].[uspPrintError];
 
 
        -- Rollback any active or uncommittable transactions before
 
        -- inserting information in the ErrorLog
 
        IF @@TRANCOUNT > 0
 
        BEGIN
 
            ROLLBACK TRANSACTION;
 
        END
 
 
        EXECUTE [dbo].[uspLogError];
 
    END CATCH;
 
END;
 
</pre>
 
 
=== References ===
 
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
|- style="background:silver"
 
|- style="background:silver"
Line 406: Line 268:
 
| '''Child Object
 
| '''Child Object
  
|- valign="top"
+
|-
 
| Data Type
 
| Data Type
 
| Type
 
| Type
Line 413: Line 275:
 
|  
 
|  
 
|  
 
|  
|- valign="top"
+
|-
 
| Data Type
 
| Data Type
 
| Type
 
| Type
Line 420: Line 282:
 
|  
 
|  
 
|  
 
|  
|- valign="top"
+
|-
 
| Data Type
 
| Data Type
 
| Type
 
| Type
Line 427: Line 289:
 
|  
 
|  
 
|  
 
|  
|- valign="top"
+
|-
| Schema
 
| Schema
 
| [[Sales_(schema)|Sales]]
 
 
 
|
 
|
 
|- valign="top"
 
 
| Select
 
| Select
 
| Table
 
| Table
Line 441: Line 296:
 
| Trigger
 
| Trigger
 
| uSalesOrderHeader
 
| uSalesOrderHeader
|- valign="top"
+
|-
 
| Update
 
| Update
 
| Table
 
| Table
Line 448: Line 303:
 
| Trigger
 
| Trigger
 
| uSalesOrderHeader
 
| uSalesOrderHeader
|- valign="top"
+
|-
 
| Update
 
| Update
 
| Table
 
| Table
Line 455: Line 310:
 
| Trigger
 
| Trigger
 
| uSalesOrderHeader
 
| uSalesOrderHeader
|- valign="top"
+
|-
 
| Update
 
| Update
 
| Table
 
| Table
Line 462: Line 317:
 
| Trigger
 
| Trigger
 
| uSalesOrderHeader
 
| uSalesOrderHeader
|- valign="top"
+
|-
 
| Execute
 
| Execute
 
| Procedure
 
| Procedure
Line 469: Line 324:
 
| Trigger
 
| Trigger
 
| uSalesOrderHeader
 
| uSalesOrderHeader
|- valign="top"
+
|-
 
| Execute
 
| Execute
 
| Procedure
 
| Procedure
Line 476: Line 331:
 
| Trigger
 
| Trigger
 
| uSalesOrderHeader
 
| uSalesOrderHeader
|- valign="top"
+
|-
 
| Execute
 
| Execute
 
| Function
 
| Function
Line 483: Line 338:
 
| Trigger
 
| Trigger
 
| uSalesOrderHeader
 
| uSalesOrderHeader
|- valign="top"
+
|-
 
| Execute
 
| Execute
 
| Function
 
| Function
Line 492: Line 347:
 
|}
 
|}
  
=== Dependencies ===
+
 
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
{| border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse"
 
|- style="background:silver"
 
|- style="background:silver"
Line 502: Line 357:
 
| '''Child Object
 
| '''Child Object
  
|- valign="top"
+
|-
 
| Select
 
| Select
 
| View
 
| View
Line 509: Line 364:
 
|  
 
|  
 
|  
 
|  
|- valign="top"
+
|-
 
| Select
 
| Select
 
| Table
 
| Table
Line 516: Line 371:
 
| Trigger
 
| Trigger
 
| iduSalesOrderDetail
 
| iduSalesOrderDetail
|- valign="top"
+
|-
 
| Update
 
| Update
 
| Table
 
| Table
Line 523: Line 378:
 
| Trigger
 
| Trigger
 
| iduSalesOrderDetail
 
| iduSalesOrderDetail
|- valign="top"
+
|-
 
| Select
 
| Select
 
| Table
 
| Table
Line 530: Line 385:
 
| Trigger
 
| Trigger
 
| uSalesOrderHeader
 
| uSalesOrderHeader
|- valign="top"
+
|-
 
| Update
 
| Update
 
| Table
 
| Table
Line 538: Line 393:
 
| uSalesOrderHeader
 
| uSalesOrderHeader
 
|}
 
|}
 +
  
  

Please note that all contributions to dbscript Online Help may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Project:Copyrights for details). Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)